为了清楚起见,我更改了三个回购名称:SharedStuff、ProjectA和ProjectB这两个项目都使用git子树来维护SharedStuff的本地副本。它们都进行了本地更改,我试图集中合并,测试,然后再次合并。我在projecta repo上运行过:…然后将其推到git subtree split --prefix=SharedStuff -b SharedStuff_from_ProjectA --rejoinrepo,解决了一些简单的冲突,并将其合并。现在我在projectb repo上运行这个:…然后又把它推到了一个新分支的SharedStuffrepo。当我尝试在中合并这些更改时,会出现问题。在当前情况下,我切换到git subtree split --prefix=platform/SharedStuff -b SharedStuff_from_Project_B --rejoin分支,然后切换到SharedStuff—但是我立即得到所有被更改的文件,列为添加/添加冲突。当我运行SharedStuff_from_Project_B时,每个都有如下错误:Merging:somefile.xyzNormal merge conflict for 'somefile.xyz': {local}: created file {remote}: created filefatal: invalid path './somefile.xyz_BASE_20704.cs'(当然,如果我尝试另一种方法——将git merge master合并为git mergetool——我会得到相同类型的冲突,只是相反。仍然添加/添加)。我的猜测是,ProjectB的历史记录中可能有错误,导致出现了添加/添加。但是,我不知道如何进一步诊断这个问题-我能做什么?编辑:在SharedStuff_from_Project_B中有以前的子树“rejoin”commit,但此时似乎更改没有合并到master中。但是,重新运行带有ProjectB的SharedStuff会产生相同的问题-许多git subtree split合并冲突,尽管该拆分子树分支的历史可以追溯到首次将--ignore-joins放入add/add时。:(编辑:同样,从SharedStuff到ProjectB上的拆分子树之间的git merge-base也不会给出任何结果。我不知道这是怎么回事,也不知道怎么解决? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我不知道是什么引起的。不过,我是这样解决的-有点。我仍然想要更好的答案!两个“共享”分支实际的master onSharedStuff和split off copy fromProjectB在其远程历史中具有相同的提交-好吧,相同的treeshas在内部有相同的更改,但提交shas不同。这是因为,不知何故,ProjectB分支的第一次提交与SharedStuff不同。只要历史上没有共同的承诺(具有相同的shas),合并、重新平衡等将无法找到共同的基础,并将假定在两个历史中都添加了文件。解决方案:在历史记录中查找两个具有相同的treesha(即完全相同的文件内容)的早期提交,并在ProjectB的拆分分支中手动“覆盖”提交到SharedStuff的主控中的父级。我用移植物做了这个:Setting git parent pointer to a different parent将新行写入.git/info/grafts,基本上wrong-parent right-parent切换到branch-discover powershellecho使用了16位字符格式,重新保存并再次切换;)在分支机构上运行git filter-branch right-parent..HEAD以完成交易验证所有内容是否可合并下一个有趣的挑战将是看看这个版本如何合并回ProjectB;完成后会更新。我仍然欢迎一个真正的答案-这真是太下流了! (adsbygoogle = window.adsbygoogle || []).push({});
08-27 02:42