对于我的生活,我无法让git subtree merge
工作。这是我的情况:
我正在研究名为Workshop的Moodle的内置部分。代码位于mod/workshop
目录中的moodle
。我必须将我的本地Moodle升级到2.5并让我的Workshop更改才能在其中工作。所以,对我来说显而易见的解决方案是:
MOODLE_25_STABLE
分支
MOODLE_25_STABLE_workshop
的分支mod/workshop
分支中的MOODLE_23_STABLE_workshop
合并到MOODLE_25_STABLE_workshop
如果我想将MOODLE_23_STABLE_workshop
中的每个文件合并到MOODLE_25_STABLE_workshop
,那将是 easy 但我只想将我的提交重播到{{1} } 目录。通过六个月的提交,是否有一种比mod/workshop
方式更简单的方法?因为我真的,真的不想这样做。
我已经尝试过的事情:
cherry-pick
和
$ git subtree merge --prefix=mod/workshop/ MOODLE_23_STABLE_workshop:mod/workshop
error: 402c67f6fedc96a6fed76e663df4e5af9dfa094e: expected commit type, but the object dereferences to tree type
感谢任何指导。
答案 0 :(得分:1)
嗯,合并(没有处理交叉合并的策略的递归部分)只是用最近的共同祖先和远程祖先的差异修补本地树。
有一个命令可以获得合并基础git merge-base
,但如果使用git diff
(3而不是2个点),...
甚至可以自己调用它操作
所以合并是:
git diff HEAD...MOODLE_23_STABLE_workshop -- mod/workshop/ | git apply -3
而不是你提交它。
你可能不应该尝试录制MOODLE_23_STABLE_workshop
作为基础,因为它确实不是。如果您这样做,则下一次合并将假定您合并了所有更改并明确还原了mod/workshop/
之外的更改。另一方面,如果你没有记录父级,下一次合并将尝试重新应用更改,如果再次修改相同的区域会导致不必要的冲突,因为git足够智能识别已经应用的差异,但无法分辨当差异废除其他变化时。