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
从上面的配置设置可以看出,branches
和 tags
被忽略了,因为我只想迁移 trunk
的内容。 Git-svn fetch 还检索了 branches
和 tags
目录以保留合并历史。
此时 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
选项
背景:
我正在迁移到 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
从上面的配置设置可以看出,branches
和 tags
被忽略了,因为我只想迁移 trunk
的内容。 Git-svn fetch 还检索了 branches
和 tags
目录以保留合并历史。
此时 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
选项