如何拆分"历史" git存储库?

时间:2015-05-06 08:56:51

标签: git version-control

我在这里有一个相当特殊的案例:我在不同的VCS(git,svn)中有一些旧的存储库。我现在想/必须整理一些东西。

目标是将所有内容迁移到一个VCS,我们决定使用git。 在第一步中我导入了"外来"使用git svn将VCS历史记录转换为git。到目前为止一切都还不错。

另一个问题是,在所有文件(包括生成/编译的文件)都添加到VCS的意义上,用户没有正确使用SVN。 结果,历史非常庞大和繁琐。 由于新项目很快将从实际版本开始,我搜索解决方案以避免将整个二进制数据保存在git中的每个开发回购中。在另一方面,我不想扔掉所有旧的东西。将来可能需要它。因为有三个分支,......

我发现linux内核使用了历史记录的信息(参见this question on stackoverflow)。 我在linux内核处理器上玩了一下,看看它是如何工作的。

现在我不确定我是否正确理解了所有内容,以及我是否正确地做到了。通常我会从工作副本创建一个孤立的分支,并使用这个分支作为未来任何开发的起点:

git checkout --orphan new_master
<Commit all source files and leave all bin files out>
git remote add new_origin <...>
git push new_origin new_master:master

如果需要旧历史记录,我需要克隆新创建的存储库以及&#34;历史记录&#34;一。我在git中有两个独立的工作线,这些工作线在逻辑上是链接的。然后我将新的repo的初始提交添加到历史回购的最终提交中,并且应该设置一个完整的回购。

我是正确还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

你可以简单地使用像

这样的东西
git init
git add .
git commit -m "Import project blablabla"

在包含要导入的所有文件的目录中(但不包括.svn之类的目录),并获取一个没有历史记录的新Git存储库。

如果您已经有导入的历史记录,并且此历史记录的最新提交包含正确的文件,那么

git checkout --orphan也会有效。

然后,您希望在导入的历史记录之上移植此提交。 Graft points最初是针对此用例创建的,但它们已被git replace取代。 git replace的手册页难以阅读,但有Replace Kicker教程。