我有三个仓库 - 为了更清晰,名称已更改:
SharedStuff
、ProjectA
和 ProjectB
这两个项目都使用 git-subtree 来维护对 SharedStuff
的本地副本。它们都进行了一些本地更改,我正在尝试将这些更改集中合并、测试,然后再次分别合并回每个项目。
我在 ProjectA 仓库上运行了以下命令:
git subtree split --prefix=SharedStuff -b SharedStuff_from_ProjectA --rejoin
... 然后将其推送到 SharedStuff
仓库,在那里解决了一些简单的冲突,并进行了合并。
现在我在 ProjectB 仓库上运行了以下命令:
git subtree split --prefix=platform/SharedStuff -b SharedStuff_from_Project_B --rejoin
... 然后将其推送到 SharedStuff
仓库的一个新分支中。问题出现在我尝试合并这些更改时。
在当前情况下,我切换到 SharedStuff_from_Project_B
分支,然后运行 git merge master
- 但是我立即看到所有已更改的文件都列为 add/add 冲突。在运行 git mergetool
时,每个文件都会出现这样的错误:
Merging:
somefile.xyz
Normal merge conflict for 'somefile.xyz':
{local}: created file
{remote}: created file
fatal: invalid path './somefile.xyz_BASE_20704.cs'
(当然,如果我尝试反过来-将 Project_B
中的 SharedStuff_from_Project_B
合并到 master
中-我会遇到相同类型的冲突,只不过是相反的。仍然是add / add)。
我猜测在ProjectB的历史记录中可能有问题,导致出现add / adds的情况。 我不确定如何进一步诊断这个问题 - 我该怎么办?
编辑:在 ProjectB
中先前有一个子树“重新加入”提交,但似乎那时更改没有合并到 SharedStuff
中。 但是,使用 --ignore-joins
重新运行 git subtree split
会产生相同的问题-尽管该分离子树分支的历史记录可以追溯到将 SharedStuff
首次放入 ProjectB
的时候。 :(
编辑:此外,在 ProjectB
的分离子树与 SharedStuff
上的 master
之间进行 git merge-base
也没有给出任何结果。 我不确定这是如何发生的或如何解决?