我有几个依赖于同一个库的项目,为此我想维护一个单独的git存储库,以便在每个项目中使用git-subtree进行管理.例如,在每个项目中,我可以做到:
project1$ git subtree add --prefix=lib1 /path/to/lib1.git master
project2$ git subtree add --prefix=lib1 /path/to/lib1.git master
Run Code Online (Sandbox Code Playgroud)
现在在处理project1的过程中,我对lib1进行了一些更改,比如lib1/file1.c,并将其推回到中央仓库:
project1$ git add lib1/file1.c
project1$ git commit -m "updates to lib1"
project1$ git subtree push --prefix=lib1 /path/to/lib1.git master
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但现在我想更新project2的lib1副本.所以我尝试:
project2$ git subtree pull --prefix=lib1 /path/to/lib1.git master
Auto-merging lib1/file1.c
CONFLICT (content): Merge conflict in lib1/file1.c
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我确定没有对project2下的任何lib1文件进行任何更改,那么为什么会出现冲突呢?
冲突是半空的,就像这个问题中报道的那样.所有东西都在一个系统(OS X)中被拉/推,所以我知道那里的线路结尾没有问题.
当然这是git-subtree的常见用例,并且有一个我看不到的简单答案.请帮忙!
编辑:我发现了一个令人不满意的解决方法:在将更改推送到子树后,我需要重新运行子树拉:
project1$ git subtree push --prefix=lib1 /path/to/lib1.git master
project1$ git subtree pull --prefix=lib1 …Run Code Online (Sandbox Code Playgroud)