SVN to Git:只保留中继内容的“基本”历史记录

时间:2015-03-09 11:50:56

标签: git github git-svn

背景

我正在向Git迁移一个包含40.000版本和20多GB数据的大型SVN存储库。 我通过使用以下.git / config设置运行git svn fetch从SVN获取了我的存储库:

[svn-remote "svn"]
ignore-paths = ^[^/]+/(?:branches|tags)  <--- note ignoring tags and branches
url = https://svn_server/repos/my_repo
fetch = :refs/remotes/git-svn

由于上面的配置设置可以注意到,branchestags已被忽略,因为我只想迁移trunk的内容。 Git-svn fetch还检索了branchestags目录以保持合并历史记录。

此时remotes/git-svn分支包含:

repo/
--branches
--tags
--trunk

目标:

我想要的是在我的Git存储库中只有trunk的内容,删除分支和标签,并保留现有文件的历史记录,因为我无需恢复到任何分支,我不喜欢不需要查看或恢复任何已删除的文件。

我的第一次尝试是使用以下命令重写历史记录删除branches文件夹:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch branches"

跑了大约48个小时后,我杀死了这个过程。 我知道我有大量的数据,但这段时间对我来说似乎是不合理的,所以我想我的方向并不正确。

通过仅保留现有文件的历史记录,我相信我可以将存储库大小从20 GB减少到1 GB以下,然后就可以将其上传到Github。

问题:

有没有办法只将trunk内容克隆到新的Git存储库,只保留trunk中的文件历史记录而不引用已删除的文件或删除的分支?

1 个答案:

答案 0 :(得分:2)

好吧,只需克隆主干,只有主干:

git svn clone http://svn_server/repos/my_repo/trunk

请注意,我直接指向trunk,不要使用-s选项。