私の別のプロジェクト (B) と一定量のコードを共有する、より大きな git リポジトリ (A) があります。メンテナンスを容易にするために、共通コード (C) を含む 3 番目のリポジトリを用意することにしましたgit subtree
。
Aにすべてを準備し(共通コードをフォルダー「sub」に入れます)、サブディレクトリを別のGitリポジトリに切り離す(移動する)で説明されている手順を使用してCを作成しました
いくつかのコミットで C ができたので、それを A のフォルダー サブに戻したいと思いました。サブフォルダーのすべてのコミットが複製される限り、 http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.htmlで説明されているアプローチを使用しました。私はこれを気にしませんでしたが、今ではこのサブディレクトリで作業を続ける方法がわかりません。
CにプッシュしたいA/subに追加の変更を加えました。git subtree push changes back to subtree project I usedで説明されているように
git subtree split --prefix sub -b split-branch
サブツリーのみでブランチを作成します。これには少し時間がかかりますが、正常に終了します。やっている
git checkout split-branch
git push remote-c master
私にくれます
failed to push some refs to "remote-c"
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and merge the remote changes
hint: (e.g. 'git pull') before pushing again.
しかし、git pull remote-c master
私はすでに最新だと言っています。
この状況を解決するにはどうすればよいですか?
EDIT1:小さなテストスクリプトで問題を再現しようとしました。このスクリプトの実行:
( cd testC; git init --bare )
( cd testA; git init )
cd testA
git remote add C ../testC
mkdir sub
echo subFile1 > sub/subFile1
echo subFile2 > sub/subFile2
git add sub
git commit -m "adding files"
echo FileA > fileA
echo FileB > fileB
git add fileA fileB
git commit -m "add root level files"
# extract subtree and push to C
git subtree split -P sub -b split-branch
git push C split-branch:master
# try to make an update in C
git checkout -b cmaster C/master
echo subFile2new > subFile2
git commit subFile2 -m "updated #2 in C"
git push
これにより、
To ../testC
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '../testC'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.