我有一个模块存储库,其中包含一些分支 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 。有没有人知道我能做些什么来使这个场景有效?
答案 0 :(得分:1)
回复自己:
似乎解决方案被隐藏在github repository for git-subtree (outdated)对git-subtree的原始贡献的文档中。在那里,它读取
用于添加,合并,推送,拉动的选项
- 壁球::
此选项仅对添加,合并,推送和拉取有效 命令。
...
使用'--squash'也有助于避免同样的问题 子项目在同一个项目中多次包含 项目,或被删除,然后重新添加。在这样的 结合历史,没有意义 无论如何,因为目前还不清楚历史的哪一部分 属于哪个子树。
将--squash
添加到git subtree
命令会将正确的历史记录输入正确的位置。