我有一个很大的存储库,100,000多个修订版,具有非常高的分支因子.使用git-svn初始获取完整的SVN存储库已经运行了大约2个月,并且只能达到修订版60,000.有没有办法加速这件事?
由于git-svn像筛子一样泄漏内存,我已经经常杀死并重新启动fetch.传输通过本地LAN进行,因此链接速度不应成为问题.存储库位于专用光纤通道阵列支持的专用机器上,因此服务器应该有足够的功能.我能想到的另一件事是从SVN存储库的本地副本进行克隆.
其他人在类似情况下做了什么?
Ben*_*son 22
在工作中我使用git-svn对抗~170000修订版SVN repo.我所做的是使用git-svn init+ git-svn fetch -r...将我的初始提取限制为合理数量的修订.您必须小心选择实际位于所需分支中的修订.即使截断历史记录,一切都完全正常,除了 git-blame显然将所有早于起始转速的线路归因于第一次转速.
您可以使用ignore-path进一步加快速度,以删除您不想要的子树.
您可以稍后添加更多修订,但这将是痛苦的.你将不得不重置rev-map(遗憾的是我甚至写了git-svn reset,我不能随便说它是否会删除所有修订,所以它可能是手动).然后进行git-svn fetch更多修订并将git-filter-branch旧的root重新显示到新树.这将重写每次提交,但不会影响源blob本身.当人们进行svn回购的大量重组时,你必须做类似的手术.
如果您确实需要所有修订(例如迁移),那么您应该看一下svn-fast-export + git-fast-import的一些风格.可能有一个添加rev标签来匹配git-svn,在这种情况下你可以快速导入然后只是移植到svn遥控器.即使现有的svn-fast-export选项没有该功能,您也可以在原始克隆完成之前添加它!
MrE*_*vil 14
显然没有好的答案.一些工作正在进行git-fast-import,但尚未准备好迎接黄金时段.他们仍在试图弄清楚如何检测和表示'svn cp'动作.一个亮点是名单上有人提出了git-svn的优化,这似乎产生了很大的影响.
http://permalink.gmane.org/gmane.comp.version-control.git/168718
在具有20k提交的存储库中,我遇到了类似的问题.在我的情况下,事实证明subversion中有一些奇怪的标签导致了问题.有标签复制/而不是/ trunk.这导致git svn fetch进入无限循环.我通过转换块来修复它.
git svn fetch -r0:1000
git svn fetch -r0:2000
git svn fetch -r0:3000
Run Code Online (Sandbox Code Playgroud)
观察输出,如果你偶尔看不到新的......那就错了.使用git log --all看多远转换了.假设你到了1565.然后继续像这样取.
git svn fetch -r1567:2000
Run Code Online (Sandbox Code Playgroud)
这非常乏味,但它完成了工作.
如果你能找到一个有足够 RAM 的服务器,就在 ramdisk 上执行整个克隆操作。在 Linux 系统上,您可以使用由 RAM 支持的 /dev/shm。
> svnadmin hotcopy /path/to/svn/repo /dev/shm/svn-repo
> git svn clone file:///dev/shm/svn-repo /dev/shm/git-repo
Run Code Online (Sandbox Code Playgroud)
完成后,您可以将 git 存储库指向您真正的 svn 存储库,而不是如下所述:https : //git.wiki.kernel.org/index.php/GitSvnSwitch
- 编辑 .git/config 中的 svn-remote url URL 指向新域名
- 运行 git svn fetch - 这需要从 svn 获取至少一个新版本!
- 将 svn-remote url 改回原来的 url
- 运行 git svn rebase -l 进行本地变基(使用上次获取操作带来的更改)
- 将 svn-remote url 改回新的 url
- 运行 git svn rebase 现在应该可以再次运行了!
这只会在 git svn fetch 步骤实际获取任何东西的情况下起作用!(我花了一段时间才发现……我必须对我们的 svn 存储库进行虚拟修订才能实现!)
我只是这样做了,并且能够在大约 3 小时内将 4.7G 12000 修订版 svn repo 克隆到 git。
小智 5
我有一个包含超过 8000 条评论和大约 240 个标签的存储库。我尝试运行并估计我在 Windows 上的初始 git svn 克隆需要几个月的时间,只需做
git svn clone --stdlayout --no-metadata --authors-file=users.txt https://link.to.repo
Run Code Online (Sandbox Code Playgroud)
克隆导入 1 个修订版平均需要 5 秒。请注意,每当遇到标签时,克隆都会从版本 1 重新启动,因此可能有 8k * 240 次操作 = 111 天
我为加快这一过程而采取的所有步骤的摘要:
linux 和 osx 的实现比 Windows 上的 cygwin 快得多。我用的是linux虚拟机。请检查/sf/answers/1511983161/
我使用 svnrdump 将整个 svn 存储库复制到我的机器上
svnrdump dump https://link.to.repo > repos.dump
我创建了一个本地 svn 仓库
svnadmin create svnrepo
svnadmin load svnrepo < repos.dump
我创建并安装了一个基于 RAM 的磁盘
svnadmin hotcopy svnrepo/ /dev/shm/svnrepo
最后运行克隆
git svn clone --stdlayout --no-metadata --prefix=origin/ --authors-file=users.txt file:///dev/shm/svnrepo
这里,克隆平均每秒处理 12.5 个修订,因此我预计需要不到 2 天的时间。克隆完成后我将发布更新。
| 归档时间: |
|
| 查看次数: |
11296 次 |
| 最近记录: |