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

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

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

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

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

更新应合并到的路径: 站点/所有/模块/oembed/

它们合并到的路径: 模块/聚合器/翻译/

任何人都知道如何将更新获取到子树中或者错误可能是什么?

有帮助吗?

解决方案

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

解决这个问题的最佳方法是:

  1. 按照上面的操作合并文件。

  2. 手动将所有生成的文件移动到它们所在的位置 应该 已经走了。

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

未来的合并可能会很好地工作,除非这个目录不断地处于令人难以置信的变化量中。

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

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

其他提示

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>

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

谢谢 阿彭瓦尔

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top