Git-svn 可以在大型分支存储库上使用吗?

问题描述 投票:0回答:4

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

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

这是一个接近标准的布局,配置包含获取、分支和标签指令。

由于最旧的分支和标签引用修订版 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
会是一个快速的操作。

svn git git-svn tortoisegit
4个回答
12
投票

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

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

git svn log --all -1 | git svn log --all -1 | \
  sed -n '2s/r\([0-9]*\).*/\1/p' | 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
没有理由每次都获取相同的修订版。


5
投票

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

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

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


3
投票

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

坏消息是因为 Subversion 的分支和标签只是目录,

git-svn
被迫采取悲观的路线,从头开始读取每个分支一直回到第一个修订版。是的,如果您在使用 Subversion 时遵守纪律,这将导致多次获取相同的数据,但现实世界的使用模式使这种情况不太可能发生。

晚上启动克隆,第二天早上就会看到一个漂亮的 git 仓库!

克隆后,

git svn fetch
甚至会警告您:

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

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


0
投票

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

svn.brokenSymlink解决方法

这会禁用可能昂贵的检查来解决损坏的问题 签入 SVN 的符号链接已损坏 客户。将此选项设置为“false”,如果 你跟踪一个 SVN 存储库有很多 不是符号链接的空 blob。 此选项可能会在 git 时更改 svn正在运行并生效 获取下一个修订版。如果未设置,则 git svn 假定此选项为“true”。

© www.soinside.com 2019 - 2024. All rights reserved.