2

我有一个模块存储库,其中包含一些分支branchAbranchB等。我想使用 git subtree将这些分支导入项目存储库。我像这样设置我的项目存储库:

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

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

现在我在module的master分支中进行了更改,我将其应用于branchAbranchB(通过重新设置 branchAbranchB)并且想要更新project

git fetch module

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

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

只有文件夹 A得到更新。对于folderB,我收到以下消息:

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

并且更改不会合并。显然,git 没有正确考虑到更改已应用于路径folderA,而不是folderB。有谁知道我可以做些什么来使这种情况起作用?

4

1 回答 1

1

回复我自己:

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

添加、合并、推送、拉取的选项

- 壁球::

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

...

当同一个子项目多次包含在同一个项目中,或者被删除然后重新添加时,使用“--squash”还有助于避免出现问题。在这种情况下,无论如何组合历史是没有意义的,因为不清楚历史的哪一部分属于哪个子树。

添加--squashgit subtree命令中会将正确的历史记录拉入正确的位置。

于 2013-06-13T08:44:51.467 回答