2015-06-18 300 views
2

我想合并2个git存储库,并且我想保留文件历史记录,但我不想保留提交历史记录。换句话说,我想随时保持这些变化,但我不关心SHA校验和。合并后,我不需要旧版本库。组合2个git存储库,保留文件历史记录,不保存提交历史记录

以下问题的答案不帮我,因为我总是用两个根回购结束并分开提交历史:

我想要做的,与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. 在repoA添加一个分支(mergeB)在标签A-1.0.0
  3. 从repoB樱桃挑提交到标记B-1.0.0到分支mergeB
  4. 结帐A-1.0.0
  5. 合并之前在历史上的一个点分支合并B
  6. 樱桃采摘从旧标签A-1.0.0 + 1 repoA每次提交到老脸
  7. 分支再次
  8. 重复步骤3-7为下一个标签
  9. 当一切都做,做一个rebase(也许交互式)来清理东西

这听起来像很多手动工作,有没有更好的方法来做到这一点?

回答

-1

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

git clone repo1 a 
git clone repo2 b 
cp -r a b 
rm -rf a/.git 
rm -rf b 
cd a 
git init 

BTW,有转换SNV到Git的,将保留历史的工具,所以也许你应该调查使用它们。

+0

我想我不清楚。我想保留文件历史记录,但我不想保留提交散列。从svn到git的转换进行得非常顺利,这是由我的git回购包含标签的事实所暗示的。事实上,他们来自svn并不相关并且令人困惑,所以我会编辑它。 –