Git SVN 克隆出现错误

15

我正在将几个项目从SVN迁移到Git,我正在使用Git的“svn clone”功能。我尝试运行以下命令:

git svn clone --stdlayout --authors-file=authors.txt <path-to-svn-project> <local-git-repo-name>

我已经能够克隆一些较小的项目,但当我尝试克隆一个更大的项目时,会出现以下错误:

couldn't truncate file at /usr/lib/perl5/site_perl/Git.pm line 1322.

Error removing .git/Git_04wYzV at /usr/lib/perl5/5.8.8/File/Temp.pm line 890.

我原以为在谷歌搜索中可以很快找到解决方法,但实际上这似乎是一个不寻常的错误。有没有人知道我如何解决这个问题?

我的版本相当新,我正在尝试在Windows 8.1上运行它:

Git: using version 1.9.4.msysgit.0
Subversion: using version 1.8.9
git-svn: using version 1.9.4.msysgit.0

也许你可以尝试一下SubGit? - Lazy Badger
同样在1.9.5版本中出现了错误。 - Tom Carter
这个问题解决了吗?我尝试了每个mysysgit版本,从1.8.3到最新的版本都没有成功。当我执行“git svn fetch”命令时,它总是失败。 - philk
6个回答

6

我曾经以管理员身份调用git svn fetch,这种方法行得通。它可能会访问(并尝试编辑/删除)一些需要管理员权限的文件。


5

当svn仓库太大时,我遇到了相同的困扰。我使用一个名为SmartGit的应用程序来解决这个问题。

http://www.syntevo.com/smartgit/svn-tour可以免费试用30天。

如果您不需要所有历史记录,另一种解决此问题的方法是从某个版本开始导入。

git svn clone -r12345:HEAD  --stdlayout --authors-file=authors.txt <path-to-svn-project> <local-git-repo-name>

最后,您可以尝试此命令(设置缓冲区大小):

git config http.postBuffer 524288000

3
不知道这是否是您遇到的问题,但我在使用git svn clone/git svn fetch克隆/拉取一个大型svn仓库时也遇到了同样的错误。有时它会抱怨无法截断文件,有时它会抱怨打开的文件太多,但是它通常会在进程中某个相当长的时间内死亡,并且会可靠地在一个特别大的修订版本上失败(最初,重试获取工作,但最终它将开始可靠地在相同的巨大修订版本上死亡)。
为了解决后者,我运行了ulimit -n 4096ulimit -n对我报告的默认限制为1024),将打开文件句柄的限制增加了四倍。但是,它不仅修复了“打开的文件太多”错误,似乎还修复了无法截断文件的问题。虽然检查源代码表明它是通过文件句柄截断的(因此不应该需要打开新的文件句柄来执行此操作,从而有可能耗尽句柄),但是这种更改似乎也解决了问题,因此底层实现可能会执行一些会触发打开句柄限制并以涉及truncate的方式死亡的操作,尽管实际上是负责的是打开文件限制本身。

2
运行git --version命令,确保你使用的是2.4+版本。我现在找不到链接了,但在2.2.x及之前的版本中,Git SVN代码存在一个错误,会导致在大型代码库迁移的各个阶段失败。我最终与Git开发人员在IRC上合作,并使用Git邮件列表上某人发布的补丁来解决问题。该补丁已经被合并和发布。请确保你使用的是最新的Git和SVN版本。你还可以通过在目录中运行git svn fetch命令来恢复git svn clone。此外,--verbose选项有助于查看更多错误上下文。

1

我在Windows 10电脑上浪费了很多时间,遇到了相同的错误。我尝试了上面的建议和其他很多方法。我的解决方案是从Linux Docker镜像中运行它。


0

我遇到了与msysgit 1.9.4完全相同的问题。
尝试使用v1.8.3代替:我用它克隆了所有的SVN仓库,没有出现错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接