JBoss / WildFly (全部俺) Advent Calendar 2013の6日目です。Hibernateのサイトが新しくなりました。全テヲ保存セヨ。
今日もコントリビュータ向け小ネタでいきましょう。僕のGitのremote設定がどうなっているのかという話。
JBossプロジェクトの開発ツリーはほとんどGitHub上にホストされており、Gitで管理されています。特定プロジェクトのソースを見たり履歴を調べるだけならgithub.comからcloneしておしまいなのですが、修正するためにforkしたり製品側の社内のリポジトリも触ったりということになってそれぞれcloneしてしまってどれがどれだろうってなってしまうのはGitビギナーに起こりがちだと思います。そもそも複数cloneする必要ありませんし、remoteで分けてしまうとremote間の差分とか取れなくなります。
まずcloneするリポジトリは必ずgithub.comの読み取り専用のURLにして、originはこちらを指すようにします。Gitのset-upstreamはoriginを指したままにすることで、引数なしのgit pullで最新を見れる、引数なしのgit pushは権限なしで必ず失敗するようにします。
Infinispanを例にします。
git clone https://github.com/infinispan/infinispan/
修正などでforkした場合はgit remoteで追加します。sshのURLです。
git remote add nekop git@github.com:nekop/infinispan.git
修正ブランチは自分のリポジトリにpushしてpull reqします。ブランチ名はJIRAのIDとどのブランチ向けなのかを含めてispnXXXX-masterという感じ(master向けは省略する、というポリシーでもいいと思います)。
git checkout -b <branch> master # なおしてcommit git push nekop <branch>
他にgithub.comのプライベートリポジトリや、Red Hat社内のインターナルGitリポジトリなども同様にremote addしておきます。他人のリポジトリ上の未マージのpull reqに含まれる修正をテストしたり、さらに修正を重ねてpull reqしなおすときも同じでremote addして修正ブランチをチェックアウトするという流れです。