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

Vox*_*lli 19 git merge subtree git-subtree

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

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

分支"子树"包含实验分支的主存储库是: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 /

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

ape*_*arr 19

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

解决它的最佳方法是:

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

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

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

未来的合并可能会正常工作,除非这个目录经常出现难以置信的变化.

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

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

  • 我刚刚向git提交了一个补丁,它允许你使用'-Xsubtree ='选项显式覆盖子树,并且它被接受了.在git 1.7.0左右查找它. (7认同)
  • 当你从源代码库引入一个文件夹(例如`git read-tree --prefix = dest/-u source_repo/master:folder_in_repo /`)而不是整个东西时,将甚至较小的更改合并回repo似乎导致整个文件夹被放置到repo中的新位置(即重复). (2认同)
  • 当git出错时,最痛苦的合并.试试`-X subtree = XX`对我有所帮助,谢谢 (2认同)

Fli*_*McF 11

git版本1.7.9.5

git pull -s subtree <remote name> <remote branch>
Run Code Online (Sandbox Code Playgroud)

(合并进入了错误的目录)

git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>
Run Code Online (Sandbox Code Playgroud)

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

谢谢apenwarr

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