2015-05-06 257 views
0

我在这里有一个相当特殊的情况:我有一些旧的仓库在不同的VCSs(git,svn)。我现在想要/必须整理一些事情。如何拆分“历史”git存储库?

目标是将所有内容迁移到单个VCS,并决定使用git。 在第一步中,我使用git svn将“foreign”VCS历史导入到git中。一切都很好。

另一个问题是用户没有正确使用SVN,因为所有文件(包括生成/编译的文件)都被添加到VCS。因此历史相当庞大而且繁琐。 由于新项目将很快从实际版本开始,我寻找一种解决方案,以避免整个二进制数据保存在git的每个开发仓库中。在另一方面,我不想把一切都扔掉。它可能在未来需要。因为有severar分支,...

我发现的内核也使用了历史拆分信息(请参阅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 

如果需要旧的历史,我需要克隆新创建的仓库还有“历史”之一。我在git中有两条独立的逻辑链接的工作线。然后为新的回购协议的最初提交添加一个移植文件,以便最终提交历史回购协议,并且应该建立一个完整的回购协议。

我改正了还是有更好的方法?

回答

1

你可以简单地在包含所有要导入(但不包括目录,如.svn)的文件的目录使用类似

git init 
git add . 
git commit -m "Import project blablabla" 

,并得到一个新的Git仓库没有历史。

git checkout --orphan也可以工作,如果你已经有一个导入的历史记录,并且这个历史的最新提交包含正确的文件。

然后,您想要将此提交移植到导入的历史记录之上。 Graft points最初是为此用例创建的,但它们被git replace替代。 git replace的手册页很难阅读,但有一个Replace Kicker教程。

相关问题