20

我们之前在主存储库中使用了许多子模块,但为了提高项目的可维护性,我们启动了一个实验分支,将它们全部替换为子树。

这很好用 - 但是现在当我尝试更新其中一个子树时,它错误地将更新合并到一个完全错误的目录中,甚至不是子树。

主存储库,其中分支“子树”包含实验分支,是:git://github.com/hugowetterberg/goodold_drupal.git

要合并更新的存储库来自:git://github.com/voxpelli/drupal-oembed.git

通过做合并:git merge -s subtree oembed/master

更新应合并到的路径:sites/all/modules/oembed/

它们合并到的路径:modules/aggregator/translations/

任何人都知道如何将更新放入子树或错误可能是什么?

4

2 回答 2

19

不幸的是,这是“git merge -s subtree”代码中的一个错误(或缺少的功能)。它实际上猜测您要合并的子树。通常,这神奇地被证明是正确的,但是如果您的子树包含很多更改(或者最初是空的,或者其他什么),那么它可能会严重失败。

解决它的最佳方法是:

  1. 像上面那样合并文件。

  2. 手动将所有生成的文件移动到它们应该去的地方。

  3. git commit -a --amend更正合并提交。

未来的合并可能会正常工作,除非这个目录一直处于令人难以置信的流量中。

实验性的“ git subtree ”命令有一个--prefix参数可以让你覆盖它,但不幸的是它目前不起作用(因为它需要解决“git merge -s subtree”功能并且没有时间做它)。

无论如何,这应该是一种罕见的情况,即使将来合并同一项目也不需要解决方法。

于 2009-08-20T17:53:40.937 回答
12

git 版本 1.7.9.5

git pull -s subtree <remote name> <remote branch>

(合并进入错误的目录)

git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>

请注意,目录上没有尾部斜杠

谢谢apenwarr

http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html

于 2013-09-19T15:51:47.970 回答