チーム開発後に、共同で更新してきた本家のリポジトリをメンバー個人のgitに移行して管理する場合に、github上でfork処理(リポジトリのコピー)を行いますが、forkしたリポジトリに本家リポジトリの更新内容を同期して反映する手順を解説します。
イメージとしては以下図のようになります。ここでは、fork元の本家リポジトリをupstream-test、fork先のリポジトリをdownstream-test、アプリケーションをtest_appとします。
実装手順
以下の手順で実装していきます。
❶ 本家リポジトリからforkする
❷ forkしたリモートリポジトリをローカルへcloneする
❸ ローカルリポジトリ上でリモートリポジトリに本家リポジトリを指定する
❹ 本家リポジトリからローカルリポジトリへpullして反映する
❺ ローカルリポジトリからリモートへpushして反映する
❻ローカルでの更新がリモートへ反映されるかテスト
❶ 本家リポジトリからforkする
githubのアプリケーション上で画面右上のForkを選択します。
❷ forkしたリモートリポジトリをローカルへcloneする
downstream-testのgithub上で、CodeからアプリケーションのURLをコピーします。
$ git clone downstream-testのURL
❸ ローカルリポジトリ上でリモートリポジトリに本家リポジトリを指定する
originのmasterと区別するために名前をupstreamにします。
$ git remote add upstream upstream-testのURL
$ git remote -v
origin https://github.com/downstream-test/test_app.git (fetch)
origin https://github.com/downstream-test/test_app.git (push)
upstream https://github.com/upstream-test/test_app.git (fetch)
upstream https://github.com/upstream-test/test_app.git (push)
上記のようにupstreamに本家リポジトリが指定されました。
❹ 本家リポジトリからローカルリポジトリへpullして反映する
$ git pull upstream master
❺ ローカルリポジトリからリモートへpushして反映する
fork先のリモートリポジトリへ反映します。
$ git push origin master
❻ローカルでの更新がリモートへ反映されるかテスト
ローカルリポジトリ(masterブランチ)で新規ファイル作成します。ターミナル上でコミットしてリモートへpushし、github上で反映されていればOKです。
$ git add tttest
$ git commit -m "tttest"
[master xxxxxxx] tttest
2 files changed, 2 insertions(+)
create mode 160000 test_app
create mode 100644 tttest
$ git push origin master