-1

我正在寻找有关合并三个 Git 存储库的建议或警告。我需要维护提交历史和所有分支。

我已经检查了这个问题这个问题,似乎“git-subtree”命令会做我想要的,但似乎该命令已被删除或其他东西(评论似乎在这个问题上发生冲突。)那里是一个“git subtree”命令,但我不确定它的作用,而且文档很薄。

我有三个 Git 存储库,每个存储库都包含一个 Maven 项目。文件和存储库根本不重叠(例如,没有一个项目是任何其他项目的 Git 子模块。)它们是完全独立的,除了 B 和 C 中引用 A 的代码:

ProjectA.git
    pom.xml
    /src/....

ProjectB.git
    pom.xml
    /src/...

ProjectC.git
    pom.xml
    /src/...

我想将它们合并到一个“父”存储库中:

Parent.git
    /ProjectA
        pom.xml
        /src/...
    /ProjectB
        pom.xml
        /src/...
    /ProjectC
        pom.xml
        /src/...

我需要维护提交历史和所有分支,但我对将各个存储库作为子模块或单独的存储库维护不感兴趣。事实上,如果他们在这个过程之后离开会更好,这样人们就不会继续使用它们了。

这样做的最简单和最可靠的方法是什么?有没有一种方法可以访问 git-subtree 命令(我正在使用 Git 1.8.0 在 Windows 7 上运行)或没有该命令的情况下进行此合并的方法?

4

2 回答 2

2

我认为git subtree对于这个用例来说可能有点过分了,因为您只想不可逆转地组合存储库。

首先,在每个现有存储库中,创建相关的项目子目录(projectA 或其他)并使用git mv. 提交这些更改。然后依次检查每个其他分支并为每个分支重复该过程。

然后使用git remote add,git fetch然后git merge为每对存储库中的每对同名分支。如果您在任何存储库中有任何唯一命名的分支,则需要将它们合并master(使用-s oursor-s theirs合并策略,具体取决于您是合并 FROM 还是合并它们)。否则,它们会很奇怪,因为它们会丢失 2/3 的项目(但这可能并不重要,因为其他 2/3 仍然存在于其他分支中)。

由于现在不会有冲突,这应该可以正常工作,并保留您的所有历史记录。但是我还没有尝试过,所以暂时不要删除旧的存储库,以防万一出错!

于 2013-10-26T21:31:25.607 回答
0

你在说什么?您可以通过键入 git-subtree 来运行git subtree,如第一个问题的示例代码中所述。

于 2013-10-26T21:20:50.003 回答