【发布时间】:2014-12-17 15:19:15
【问题描述】:
我有四个独立的项目。他们有自己的 git 存储库。以及所有项目的相同分支名称。
/project/
/project/projA/
/project/projA/.git/
/project/projB/
/project/projB/.git/
/project/projC/
/project/projC/.git/
/project/projD/
/project/projD/.git/
所有 git 存储库都有相同名称的分支,当然还有自己的 master 分支。
问题
我想像这样将所有项目合并为一个:
/Project/.git/
/project/projA/
/project/projB/
/project/projC/
/project/projD/
但是
我想保留所有分支的历史记录。
ps -> 我对所有 repo 都有相同的分支名称。 例如:用于所有四个项目的分支名称:V6-004
详情
我尝试了 submodule 和 subtree 但两者都没有解决问题。
我也试过这个。
$ mkdir new_parent_project
$ cd new_parent_project
$ git init
# Now we need to create the initial commit. This is essential.
$ touch README.md
$ git add README.md
$ git commit -am "initial commit"
之后
# merge project ProjA into subdirectory ProjA
$ git remote add -f ProjA http://GitUrl
$ git merge -s ours --no-commit ProjA/V6-006
$ git read-tree --prefix=ProjA/ -u ProjA/V6-006
$ git commit -m "merging ProjA into subdir: ProjA"
之后
# merge project ProjB into subdirectory ProjB
$ git remote add -f ProjB http://GitUrl
$ git merge -s ours --no-commit ProjB/V6-006
$ git read-tree --prefix=ProjB/ -u ProjB/V6-006
$ git commit -m "merging ProjB into subdir: ProjB"
但是
项目已合并,但我只有 V6-006 的历史记录。但我没有其他分支的历史记录。
【问题讨论】:
-
“我尝试了子模块和子树,但两者都没有解决问题。”......太糟糕了:在这种情况下,子模块是一个简单的解决方案。
-
是的,但是。当您想在项目中包含仅偶尔需要更新的第三方库时,此模型效果很好。另一方面,如果您将子模块用于紧密耦合的库,您将经常对其进行更改,你会发现子模块不是答案。
-
每个子仓库是否只有一个分支 (
master) 可以进入您的仓库?或者这些子回购是否有自己的多个分支? (除了他们的master) -
是的,这些子存储库有自己的多个分支。
-
您只需要单个分支和子目录中的所有现有历史记录,然后在最后合并一个巨大的章鱼将所有内容组合在一起吗?
标签: git github merge git-branch git-subtree