Kie*_*one 19 git git-merge git-subtree
我有三个回购 - 名称已更改为清晰:
SharedStuff,ProjectA和ProjectB
这两个项目都使用git-subtree来维护本地副本SharedStuff.他们都进行了本地更改,我正在尝试集中合并,测试,然后再次合并到每个.
我在ProjectA回购中运行了这个:
git subtree split --prefix=SharedStuff -b SharedStuff_from_ProjectA --rejoin
...然后将其推送到SharedStuff回购,解决了一些简单的冲突,将其合并.
现在我在ProjectB repo上运行它:
git subtree split --prefix=platform/SharedStuff -b SharedStuff_from_Project_B --rejoin
......然后又把它推到了SharedStuff一个新的分支中.当我尝试合并这些更改时,会出现问题.
在当前的情况下,我切换到SharedStuff_from_Project_B分支,然后git merge master- 但我立即将所有更改的文件列为添加/添加冲突.当我运行时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'
Run Code Online (Sandbox Code Playgroud)
(当然,如果我尝试相反的方式 - 合并SharedStuff_from_Project_B到master- 我得到相同类型的冲突,只是逆转.仍然添加/添加).
我的猜测是ProjectB的历史可能有问题,导致添加/添加的外观.不过我不确定如何进一步诊断 - 我该怎么办?
编辑:之前有一个子树"rejoin"提交ProjectB,但SharedStuff似乎没有合并到那个点.但是,重新运行git subtree split与--ignore-joins产生同样的问题-大量的add/add合并冲突,尽管分流树分支回去当以历史SharedStuff首次投入ProjectB.:(
编辑:另外git merge-base从分割子树之间ProjectB,并master在SharedStuff不给任何结果.我不确定这是怎么回事或如何解决?
我不知道是什么原因造成的。然而,这就是我解决它的方法 - 有点。我还想要更好的答案!
实际主分支SharedStuff和分离副本的两个“共享”分支ProjectB在其遥远的历史中都有相同的提交 - 好吧,tree内部具有相同的 SHA,但提交 SHA 不同,因此发生相同的更改。这是因为,不知何故,该ProjectB分支的第一次初始提交与SharedStuff.
只要历史记录中没有共同的提交(具有相同的 SHA),合并、变基等就无法找到共同点,并且会假设文件已添加到两个历史记录中。
解决方案:在历史记录中找到具有相同treeSHA(即完全相同的文件内容)的两个早期提交,并提交信息(消息、作者等),然后手动将拆分ProjectB分支中该提交的父项“覆盖”到父项在SharedStuff的主人。
我使用嫁接做到了这一点:将 git Parent 指针设置为不同的父级
.git/info/grafts基本上写一个新行wrong-parent right-parentecho使用了 16 位字符格式,用 Sublime Text 重新保存并再次切换;)git filter-branch right-parent..HEAD树枝上以达成交易下一个有趣的挑战将是看看这个版本如何合并回ProjectB;完成后会更新..
我仍然非常欢迎对此问题的真正答案 - 这真的很黑客!
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |