合并2个git存储库,保留文件历史记录,不保留提交历史记录

时间:2015-06-18 15:08:05

标签: git

我想组合2个git存储库,我想保留文件历史记录,但我不想保留提交历史记录。换句话说,我希望随着时间的推移保持更改,但我不关心SHA校验和。合并后我不需要旧的存储库。

以下问题的答案对我没有帮助,因为我总是最终得到一个有两个根和独立提交历史的回购:

我想要做的是与Detach (move) subdirectory into separate Git repository完全相反,其中git subtree用于过滤掉影响子目录中文件的所有提交。

我的两个存储库有一些重叠的目录结构,但没有重叠的文件(.gitignore.gitattributes除外),我想将它们合并到存储库的根目录。

两个存储库都有标签,这些标签的命名方案略有不同,但指向特定的版本。例如,repoA具有标签A-1.0.0,A-1.0.1并且repoB具有标签B-1.0.0,B-1.0.1。我并不关心标签,不同分支或一个分支之间的提交,但是在标签处必须有某种合并点。

到目前为止,我能想出的唯一想法是可行的(我已尝试过用子树和合并找到的所有内容):

  1. 将repoB添加为远程
  2. 在标记A-1.0.0
  3. 之前的历史记录中的repoA(mergeB)中添加分支
  4. cherry-pick从repoB到标签B-1.0.0的提交到分支mergeB
  5. 结帐A-1.0.0
  6. 合并分支mergeB
  7. cherry-pick从repoA的每个提交从旧标签A-1.0.0 + 1到旧HEAD
  8. 再次分支
  9. 为下一个标签重复步骤3-7
  10. 当一切都完成后,做一个rebase(可能是交互式的)来清理东西
  11. 这听起来像很多手工作品,有更好的方法吗?

1 个答案:

答案 0 :(得分:-1)

请尝试以下步骤。您基本上是将文件从一个复制到另一个,然后从一个新的回购开始。或者,在第三个位置初始化并将旧的复制到它。

git clone repo1 a
git clone repo2 b
cp -r a b
rm -rf a/.git
rm -rf b
cd a
git init
顺便说一句,有一些工具可以将snv转换成Git来保存历史记录,所以也许你应该调查使用它们。