20

我正在尝试使用 Git 作为 SVN 存储库的前端,以便能够使用 Git 的优秀功能,例如简单的分支、存储等。

问题是 SVN 存储库非常大(8,000 转)并且包含许多分支和标签(旧的和新的)。

这是一个近乎标准的布局,配置包含 fetch、branchs 和 tags 指令。

由于最旧的分支和标签指的是修订版 10,这意味着每个人都会svn fetch从修订版 10 开始读取整个存储库历史记录,这可能需要数小时的慢速连接。

如果我只跟踪主干,那很好,但我仍然想让 git 了解新的分支和标签。

我通常查看我git log -1所在的分支并从评论中获取 SVN 修订版,所以我可以做git svn fetch -r7915:HEAD或类似的事情。我想就是git svn fetch --parent这样。但为什么我需要这样做?

我在 Windows 上,使用 TortoiseGit,它对 有很好的支持git-svn,但由于 TortoiseGit 只运行git svn fetch,我有点卡住了。

难道我做错了什么?我希望svn fetch在第一个svn clone -s完成后快速操作。

4

4 回答 4

12

感谢您的回答。不过,他们并没有真正帮助我。

该命令是迄今为止最好的解决方案:

git svn 日志 --all -1 | \
  sed -n '2s/r\\([0-9]*\\).*/\\1/p' | \
  xargs --replace=from git svn fetch -r from:HEAD

它用于git svn log --all查找迄今为止获取的最高 SVN 修订号,并从该点开始获取所有内容。

我希望git svn fetch可以选择这样做。除非 SVN 版本发生变化,否则没有理由git svn每次都获取相同的版本。

于 2010-03-04T11:14:15.760 回答
5

如果您不需要 git 存储库中的完整历史记录,我建议您查看下面链接中详细介绍的“git + svn”方法,而不是标准的 git-svn 集成。您最初导入 git 的速度应该很快,因为您不会导入历史记录。

请务必阅读标题为“优点、缺点和经验教训”的部分。

http://www.lostechies.com/blogs/derickbailey/archive/2010/02/03/branch-per-feature-how-i-manage-subversion-with-git-branches.aspx

于 2010-03-03T21:26:29.340 回答
3

您正确使用它:具有大量历史记录的 Subversion 存储库的初始导入将非常缓慢。

坏消息是因为 Subversion 的分支和标签只是目录,git-svn被迫采取悲观的路线,从头到尾读取每个分支,一直到第一个修订版。是的,如果您在使用 Subversion 时受到纪律处分,这将导致对相同数据的多次提取,但实际使用模式使这种情况不太可能发生。

晚上开始克隆,第二天早上回到一个不错的 git 仓库!

克隆后,git svn fetch甚至会警告您:

在大型存储库上这可能需要一段时间

Subversion 简单而愚蠢,所以 git 必须慢慢来。

于 2010-01-08T17:59:00.980 回答
0

您在 SVN 存储库中有符号链接吗?如果没有,您是否尝试过此设置:

svn.brokenSymlink 解决方法

这将禁用潜在的昂贵检查以解决损坏的客户端签入 SVN 的损坏的符号链接。如果您跟踪包含许多非符号链接的空 blob 的 SVN 存储库,请将此选项设置为“false”。此选项可能会在 git svn 运行时更改,并在获取的下一个修订版中生效。如果未设置,git svn 假定此选项为“true”。

于 2010-07-18T21:20:49.223 回答