独自のコードをGithubのオープンソースリポジトリに提供する場合、通常は最初にオープンソースコードリポジトリをフォークし、次にclone
ローカルに移動して独自の変更を送信し、最後にプルリクエストをマージします。
オープンソースリポジトリには通常、多くの人が一緒にコードを提供しているため、これらのプロジェクトの貢献者とのコラボレーションを継続するには、非常に一般的な問題が発生します。ソースリポジトリとの同期を維持する方法は?
以下の手順に従って、Forkのソースウェアハウスとの同期を維持します。
リモートウェアハウスを構成する
-
まず、現在構成されているリモートウェアハウスを確認します。これ
YOUR_USERNAME
は、Githubユーザー名とYOUR_FORK
Forkのウェアハウス名です。$ git remote -v > origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) > origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
-
同期するようにアップストリームウェアハウス(つまり、Forkのソースウェアハウス)を構成
ORIGINAL_OWNER
します。これは、ソースウェアハウスの作成者のユーザー名とソースウェアハウスの名前ORIGINAL_REPOSITORY
です。$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
-
構成を確認します。
upstream
最初はリモートウェアハウスです。$ git remote -v > origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) > origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) > upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch) > upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
フォークブランチを同期する
-
アップストリームリポジトリからブランチとそれぞれのコミットを取得します。以下のために
BRANCHNAME
提出ローカルブランチに格納されますupstream/BRANCHNAME
インチ$ git fetch upstream > remote: Counting objects: 75, done. > remote: Compressing objects: 100% (53/53), done. > remote: Total 62 (delta 27), reused 44 (delta 9) > Unpacking objects: 100% (62/62), done. > From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY > * [new branch] main -> upstream/main
-
ローカルのデフォルトブランチを切り替えます。これは、この例の
main
ブランチです。$ git checkout main > Switched to branch 'main'
-
upstream/main
変更をアップストリームのデフォルトブランチ(この場合は)からローカルのデフォルトブランチにマージします。$ git merge upstream/main > Updating a422352..5fdff0f > Fast-forward > README | 9 ------- > README.md | 7 ++++++ > 2 files changed, 7 insertions(+), 9 deletions(-) > delete mode 100644 README > create mode 100644 README.md
この操作により、ローカルの変更を失うことなく、ローカルのデフォルトブランチがアップストリームリポジトリと同期されます。
ローカルに個別のコミットがない場合、Gitは「早送り」操作を直接実行します。
$ git merge upstream/main > Updating 34e91da..16c56ad > Fast-forward > README.md | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-)
プッシュ同期
上記の手順は、ウェアハウスのローカルコピーのみを同期します。GitHubの更新を同期するには、ローカルの変更をGithubオンラインウェアハウスにプッシュする必要もあります。
git push origin main
ローカルコピーをオンラインウェアハウスにプッシュすると、次のエラーが発生する場合があります。
$ git push origin main
To https://github.com/YOUR_USERNAME/YOUR_FORK.git
! [rejected] main -> main (fetch first)
error: 推送一些引用到 'https://github.com/YOUR_USERNAME/YOUR_FORK.git' 失败
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
これは、リモートウェアハウスにローカルコピーに含まれていない提出物があることを意味します。実行する必要があるのは次の操作のみです。
$ git pull origin main