GithubでPull Requestするまで

参考にしたサイト

下記サイトのお作法でやってみた。 そのままだと、私の環境下ではpush時に403になったので、メモしておく。

blog.mogmet.com

qiita.com

rcmdnk.github.io

Pull Requestしたいリポジトリからforkする

変更したいリポジトリのページの右上にあるforkボタンを押す。 自分のユーザー名/リポジトリ名 としてforkされる。

forkしたリポジトリをPCにcloneして、ブランチを切る

上記で作成されたユーザー名/リポジトリ名 な Github上のforkしたリポジトリにいき、 HTTPSに記載されているURLをコピーしてcloneする。

下記コマンドをPCで実行。

$ git clone https://github.com/自分のユーザー名/リポジトリ.git
$ git checkout -b fix_hogehoge_issue

コード修正して、forkしたリポジトリに反映する

CONTRIBUTING辺りに記載されているコーディングルールやテスト有無などのお作法にしたがって修正・テスト。

$ emacs hoge.c
$ git add hoge.c
$ git commit -s -m "fix hogehoge issue"

このまま git pushすると403になったので、下記のようにユーザー名を含んだuriに変更してからpushした。

$ git remote set-url origin git@github.com:自分のユーザー名/リポジトリ.git
$ git push origin fix_hogehoge_issue

下記はhttps版の場合。

$ git remote set-url origin https://ユーザー名@github.com/自分のユーザー名/リポジトリ.git
$ git push origin fix_hogehoge_issue

Pull Requestを行う

再びGithubの自分のリポジトリからCompare & pull request を押す。

タイトルと本文を記載して、Send Pull Requestを押す。Markdownで修飾できる。 (この内容は公開されるようなので、気合が入る。)

mergeされたのでたぶんOK。

Pull Requestに対して修正依頼が来た場合

Pull Request元のbranchを修正すると、Pull Requestに反映される。

このブログの例の場合は、fix_hogehoge_issue について、

  • ソース修正
  • git add, commit, fix_hogehoge_issueをpush

すればよいようだ。

forkしたリポジトリをfork元のリポジトリに追従させる

fork元リポジトリをremoteに登録する。一回だけ行えばよい。

$ git remote add upstream git@github.com:オリジナル/リポジトリ.git

非推奨になりつつあるが、httpsの場合は下記。

$ git remote add upstream https://github.com/オリジナル/リポジトリ.git

fetchしてから、自分のfork元にpush。参照元にならってupstreamとした。

$ git checkout master
$ git fetch upstream
$ git pull upstream master:master
$ git push origin master

git pull直後、git branch -v すると、[ahead 4]などの表示がなされる。

これはoriginから4つ進んでいることを意味するらしい。

conflictしたときは、そのときに考える。

ssh で接続する場合の補足

秘密鍵は0600 のパーミッションでないとパスフレーズが聞かれずエラーになる。 下記の接続テスト時にパスフレーズの入力がなされない場合はパーミッション設定のエラー。

$ ssh -T git@github.com