如何将N git存储库合并为一个保存其历史记录的存储库?

时间:2013-05-01 14:08:26

标签: git

我有一个项目,它由几个单独的Git存储库组成(合并几个Maven项目,每个项目都有一个单独的Git存储库)。

现在我想创建一个Git存储库并将每个存储库的内容放入其子目录中,保留它们各自的历史记录(将多个Maven项目合并为一个多模块Maven项目)。

我该怎么做?

我尝试将答案应用于similar SO question

  1. 让我们调用单个存储库P1 - PN和统一存储库U
  2. 创建存储库U
  3. P1U)中创建分支git checkout -b P1
  4. P1目录中,运行命令git remote add U git@myuser.beanstalkapp.com:/U.git
  5. P1目录中,git push U P1
  6. 当我这样做时,我在最后一步中遇到以下错误:

    error: src refspec ccplogic does not match any.
    error: failed to push some refs to 'git@myuser.beanstalkapp.com:/U.git'
    

1 个答案:

答案 0 :(得分:2)

这样做的一种方法是将每个存储库添加为git submodule,但听起来好像您需要一个存储库。

您可以使用名为git-subtree的脚本创建包含所有其他存储库历史记录的单个存储库,该脚本现在是主线git的一部分,尽管在contrib目录中。要安装git-subtree script,请将其保存到git-subtree上某处的名称PATH。 (如果有效,那么git subtree应该会给你一个使用信息。)

假设您使用以下内容创建了一个新的空存储库:

mkdir example
cd example
git init
touch .gitignore
git add .gitignore
git commit -m 'Initial commit'

然后,对于每个其他存储库,您可以执行以下操作(假设存储库位于URL git://wherever/whatever.git,并且您希望其master分支显示在子目录whevs中):

git remote add whevs-remote git://wherever/whatever.git
git fetch whevs-remote
git subtree add --prefix=whevs whevs-remote/master

然后对每个其他存储库执行相同的操作。