背景
我正在向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
由于上面的配置设置可以注意到,branches
和tags
已被忽略,因为我只想迁移trunk
的内容。 Git-svn fetch还检索了branches
和tags
目录以保持合并历史记录。
此时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
中的文件历史记录而不引用已删除的文件或删除的分支?
答案 0 :(得分:2)
好吧,只需克隆主干,只有主干:
git svn clone http://svn_server/repos/my_repo/trunk
请注意,我直接指向trunk,不要使用-s
选项。