2017-09-03 63 views
0

Git版本控制下我们有几个不同的Maven项目。现在,我想将这些项目合并为聚合POM下的maven多模块项目,并为此多模块项目创建一个新的存储库。Git,如何结合多个项目保留历史,不使用子模块

但是,我不想失去这些汇总项目的历史。我尝试为聚合项目初始化一个新的存储库,并克隆工作树下的现有存储库。然而,这些子库隐含地被认为是git子模块,并且我不是git子模块API的粉丝。我认为这对其他开发者来说太晦涩难懂了,而且事实太复杂而没有真正需要。

我想只是将这些存储库中的历史记录以某种方式合并到新的集合存储库中。我不想在合并历史记录后与原始存储库同步,只是版本控制在没有子模块的新聚合存储库下的所有内容。不过,我想签出任何合并存储库的特定提交。

这可能在Git中吗?

+0

您是否得到了可帮助您解决问题的答案?如果是,您可以将其标记为答案。而且这也会使其他有类似问题的人受益。 –

回答

1
  1. 初始化一个新的回购。

  2. 从所有几个项目中复制所需版本的文件并将它们组合在一起。如有必要,您可以重新排列目录结构。并确保文件有预期的内容。

  3. 设置.gitignore,.gitattribute等。将它们全部添加并为新的回购做出第一次提交。

  4. 从几个项目中获取分支并将它们全部与选项-s ours合并。策略仅合并历史,而不包含真实内容。

例子:

比方说,我们有RepoA,RepoB和RepoC,都包含分支master。我们将合并三个分支的最新版本的文件。现在

git init RepoABC 
cd RepoABC 
#copy the files all RepoA, RepoB, RepoC and rearrange the directory structure if necessary. 
#add .gitignore, .gitattribute, etc if necessary. 
git add . 
git commit -m 'new root for combining RepoA RepoB and RepoC' 
git fetch origin_repoa master:repoa_master 
git fetch origin_repob master:repob_master 
git fetch origin_repoc master:repoc_master 
git merge repoa_master repob_master repoc_master -s ours -m 'Merge and preserve the histories of RepoA, RepoB and RepoC, with merge strategy "ours"' 

我们可以专注于新的回购的分行进行新的变化。历史是保留的,我们可以回顾他们。如果目录结构已重新排列,那么当我们第一次签出旧提交时,我们可能会遇到一个小问题。作为未跟踪文件签出后,新的文件夹和文件将保留。 git clean -df会跳过它们,所以我们必须rm -rf他们一次。

1

是的,它可能在git中。

假设有两个回购/项目需要结合起来,并为每个回购,也有不同的分支:

Repo1:masterdev1

Repo2:masterdev2

在新回购,您可以将项目与以下命令结合在一起:

git init 
# make changes and commit on master branch if you want to combine the aggregated projects in non-master branch 
git remote add repo1 <URL for repo1> -f 
git remote add repo2 <URL for repo2> -f 
git checkout -b repo1_master repo1/master 
git checkout -b repo1_dev1 repo1/dev1 
git checkout -b repo2_master repo2/master 
git checkout -b repo2_dev2 repo2/dev2 

现在repo1和repo2中的所有分支都汇总在分支中的新建回购库中:repo1_masterrepo1_dev1repo2_masterrepo2_dev2。如果您不需要再次从repo1和repo2进行更改,则可以卸下遥控器:

git remote rm repo1 
git remote rm repo2 
相关问题