SVN 至 Git:仅保留具有 "basic" 历史记录的主干内容

SVN to Git: Keep only trunk content with "basic" history

背景:

我正在迁移到 Git 一个拥有 40.000 个修订版本和 20+ GB 数据的大型 SVN 存储库。 我已经通过 运行 git svn fetch 从 SVN 获取我的存储库,并使用以下 .git/config 设置:

[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 的内容,删除分支和标签,并只保留现有文件的历史记录,因为我不需要恢复到任何分支,我不需要查看或还原任何已删除的文件。

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

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

大约 48 小时后 运行 我终止了进程。 我知道我有大量的数据,但这么长的时间对我来说似乎不合理,所以我想我的方向不对。

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

问题:

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

好吧,只克隆树干,而且只克隆树干:

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

注意我直接指向trunk,没有使用-s选项