pdfcpu
という golang
で書かれたコマンドラインツールを使って、複数のPDFファイルを1つにまとめるという作業をたまに行っているのですが、ふとOSSだしPRを送ってみようかと思い立ったのでやってみました。
Pull Requestの内容
まずは簡単なPull Request(以下PR)を送ってみようと思い
- Go Report Card でスコアを上げられる箇所の反映
- テストを追加
してみました。
ローカル作業時の注意点
Githubで管理されているGo言語プロジェクトの場合、パッケージをimportとGithubのリポジトリ名が入ります。
なので、ローカルで作業する時
すると、パッケージのパスとGoのコード内でimportするパッケージ名にずれが生じるので工夫が必要でした。
# forkしたリポジトリをgo getでローカルにインストール $ go get github.com/moritamori/pdfcpu $ cd $GOPATH/src/github.com/moritamori/pdfcpu # 任意のコードを開いてパッケージ名を確認 $ cat cmd/pdfcpu/cmd.go -n 17 package main 18 19 import ( 20 "errors" 21 "flag" 22 "fmt" 23 "os" 24 "strings" 25 26 "github.com/pdfcpu/pdfcpu/pkg/pdfcpu" 27 )
パッケージ名のずれを生じさせない工夫
以下の図のように本家である pdfcpu/pdfcpu
リポジトリ(upstream)の master
ブランチを git clone
で取得した後、作業ブランチを切るようにしました。
こうするとmaster
ブランチに差分が出た際、作業中のブランチに取り込み易いので良いです。
PRを送るまでの手順
コミットにGPG署名できるように
GPG署名を求められているOSSプロジェクトだったので設定しました。具体的な手順は別記事にまとめています。
simple-minds-think-alike.hatenablog.com
Github上でForkする
まずは、プロジェクトのコードを自分のリポジトリにforkしてきます。
ローカルにコードを取得
本家である pdfcpu/pdfcpu
を git clone
$ git clone https://github.com/pdfcpu/pdfcpu
ローカルでremoteの名前をupstreamに変える
origin
になっているpdfcpu/pdfcpu
を upstream
に変更します。
$ cd pdfcpu
$ git remote rename origin upstream
fork
した自分のアカウントのリポジトリを origin
にする。
$ git remote add origin git@github.com:moritamori/pdfcpu.git
ローカルで修正するブランチを作る
$ git checkout -b awesome-feature
$ git push origin awesome-feature
リモートブランチを確認すると以下のようになっています。
$ git branch -r origin/awesome-feature upstream/HEAD -> upstream/master upstream/master
開発途中で master
ブランチの修正を取り込む場合、 upstream
を fetch
して開発中のブランチにマージします。
$ git fetch upstream $ git merge upstream/master
PRを送る
PRを作るとContribution License Agreementに同意して欲しいとコメントが表示されるので、リンク先で同意します。
ご投稿ありがとうございます。私たちは本当に感謝しています。多くのオープンソースプロジェクトと同様に、あなたの貢献を受け入れる前に、コントリビューターライセンス契約書に署名していただくようお願いしています。
リンクの遷移先では、以下のような画面になっていました。
ライセンスの同意している間にCIが終わりCheckがpassしていたらやることはないので、メンテナの方のレスポンスを待ちました。
メンテナの方からのレスポンス
大したPRでもないのであっさりマージされました。
今度はもう少し大きめの機能の追加にチャレンジしてみたいと思います。