git子树:在不同前缀的项目中添加不同的分支

时间:2013-06-12 15:13:49

标签: git-subtree

我有一个模块存储库,其中包含一些分支 branchA branchB 等。我想将这些分支导入项目使用git子树的存储库。我设置了项目存储库,如下所示:

git remote add module /path/to/module.git
git fetch module
git subtree add -P folderA module/branchA
git subtree add -P folderB module/branchB

这似乎按预期工作,我从 folderA folderB 中的正确分支获得了文件和历史记录。

现在我对模块分支进行了更改,我将其应用于 branchA branchB (通过重新定位 branchA branchB )并想要更新项目

git fetch module

将这些更改提取到项目中。但是,当我做的时候

git subtree pull -P folderA module branchA
git subtree pull -P folderB module branchB

folderA 更新。对于 folderB ,我收到以下消息:

From /path/to/module.git
 * branch            branchB -> FETCH_HEAD
Already up-to-date.

并且未合并更改。显然,git没有正确考虑到更改已应用于路径 folderA ,而不是 folderB 。有没有人知道我能做些什么来使这个场景有效?

1 个答案:

答案 0 :(得分:1)

回复自己:

似乎解决方案被隐藏在github repository for git-subtree (outdated)对git-subtree的原始贡献的文档中。在那里,它读取

  

用于添加,合并,推送,拉动的选项

     

- 壁球::

     

此选项仅对添加,合并,推送和拉取有效   命令。

     

...

     

使用'--squash'也有助于避免同样的问题   子项目在同一个项目中多次包含   项目,或被删除,然后重新添加。在这样的   结合历史,没有意义   无论如何,因为目前还不清楚历史的哪一部分   属于哪个子树。

--squash添加到git subtree命令会将正确的历史记录输入正确的位置。