プライベートリポジトリを fork した人が作ったリモートのブランチをローカルに持ってくる
仕事のプロダクトがプライベートリポジトリで、そのリポジトリを fork した人と clone した人がそれぞれいる場合の話。
僕はそのリポジトリを自分の手元に clone して、ブランチを切ってプルリクエストを作ってというごく一般的な方法で業務を進めているのだけど、このリポジトリを fork して仕事をしているメンバーもいる。
で、fork した人が作成したプルリクエストに対して別のメンバーが変更を加えたい場合にどうするか分からなくて諦めていたんだけど、チームメンバーが教えてくれたのでメモしておく。
リモートに fork しているユーザーのリポジトリを登録する
僕(tagucch)がwork-repo
というリポジトリを Fork しているという体でメモすることにする。
僕が fork しているリポジトリからfeature/add-new-content
というブランチ名でプルリクエストを作成した場合、プルリクエストのマージ元(base)はwork-repo:develop
(ここでは develop ブランチとします。main とか master もよくあるよね)ということになるし、作られるプルリクエストのブランチはtagucch:feature/add-new-content
ということになる。
で、このブランチを別の誰かがローカルに持っていきたいときに、普通にgit switch -c feature/add-new-content tagucch/feature/add-new-content
とやっても怒られてしまう。
なので、tagucch/work-repo
を remote に登録しなければならない。
git remote add git@github.com:tagucch/work-repo
することで remote にリポジトリを登録し、git fetch tagucch
とすることでtagucch/work-repo
の状態を fetch する。
そうすることでgit switch -c feature/add-new-content tagucch/feature/add-new-content
が成功してローカルにブランチが切れる。
で、このブランチにコミットを足してgit push tagucch feature/add-new-content
することでwork-repo
にあるプルリクエストが更新される。
clone or fork
今の職場ではリポジトリを clone するか fork するかの指定は特にないんだけど、どっちのほうがいいのかよく分かっていない。
もし fork していた場合、例えばその会社を退職することで GitHub の organization から抜けた場合、その時点での fork したリポジトリがその人の repositories に残り続ける気がする(違うかもしれないけど)
それと fork の場合は上述のように各メンバーが fork した人のリポジトリを remote に追加するという作業が発生する。
fork は OSS みたいな不特定多数の開発者からプルリクエストをもらうことを前提とする場合の仕組みとしては適当だと思うけど、organization に所属しているメンバーからのコミットに限定するとしたら clone のほうがかなり楽な気がする。
なので、個人的には clone のほうがいいかなと思うんだけど実際どうなんだろう?