GithubのPullRequestを直接チェックアウトする


GithubのPullRequestを直接チェックアウトする

自分にレビュー依頼が来たPullRequestどうやってチェックしていますか?
複雑なものだと, そのPullRequestをローカルに落としてきて, 実行しないといけないかもしれません。

そうなるとどうやってそのPullRequestを落としてくるかですが…
わざわざ他人のリモートを追加して, 手動マージしていませんか?

実はGithubのPullRequestは(デフォルトでは見れない)ブランチとして存在しています。(自動マージチェックとかしてるじゃんあれは裏で自動でブランチ作ってマージしているからできます。)
なのでPullRequestを落としたければそのブランチをチェックアウトしてあげればいいです。

具体的な方法

以下fastlaneのリポジトリを使ってやってみます。

fastlaneのリポジトリを落としてくると.git/configファイルは次のようになっているはずです。
(sourcetreeで落としてきました。)

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = https://github.com/fastlane/fastlane.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

fetchの部分を「+refs/pull/:refs/remotes/origin/pr/」に書き換えてフェッチし直すと…

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = https://github.com/fastlane/fastlane.git
    fetch = +refs/pull/*:refs/remotes/origin/pr/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

こんな感じでPullRequestの番号に対応したブランチが出てきます。

ちなみにheadがPRしたそのもののブランチでmergeがマージ後になります。

以上

これなに?

refspec(参照仕様)ってやつです。
要するにブランチを検索するときのフィルタみたいなやつ(今回はそういう用途で使っています)

今まではrefs/heads/以下にあるものを参照するようにしていましたが, refs/pull以下を参照するように変えました。

注意点

1から全部のPRを持っているのでメインのローカルリポジトリに設定たさないで新しいの作ったほうがいいとおもいます。
それでも重ければrefspec調整してください。