将更新合并到我的子树时,Git很困惑

时间:2009-08-20 14:31:00

标签: git merge git-subtree subtree

我们以前在我们的主存储库中使用了很多子模块,但是为了提高项目的可维护性,我们开始了一个实验分支,我们用子树替换它们。

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

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

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

通过执行合并: git merge -s subree oembed / master

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

他们合并的路径: modules / aggregator / translations /

任何人都知道如何获取子树的更新或错误是什么?

2 个答案:

答案 0 :(得分:19)

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

解决它的最佳方法是:

  1. 如上所述合并文件。

  2. 将所有生成的文件手动移动到应该的位置。

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

  4. 未来的合并可能会很好,除非这个目录经常出现难以置信的变化。

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

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

答案 1 :(得分:10)

git version 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