我正在将几个项目从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
答案 0 :(得分:2)
以管理员身份调用git svn fetch
对我有用。它可能会访问(并尝试编辑/删除)某些需要管理员权限的文件。
答案 1 :(得分:2)
运行git --version
并确保您使用的是2.4+版本。我现在找不到链接,但是回到2.2.x之前,Git SVN代码中存在一个错误,它会导致它在各个点通过大型存储库迁移失败。我最终在IRC上与Git开发人员合作,并使用某人发布到Git邮件列表的补丁,并使其正常运行。不过,该补丁已经合并并发布。确保您拥有最近的Git和最近的SVN。您也可以通过在目录中运行git svn clone
来恢复git svn fetch
。此外,--verbose
有助于查看有关错误的更多背景信息。
答案 2 :(得分:0)
我在msysgit 1.9.4中遇到了完全相同的问题 尝试使用v1.8.3:我克隆了所有我的SVN存储库而没有错误。
答案 3 :(得分:0)
当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
答案 4 :(得分:0)
不知道这是否是您的问题,但是在进行大型svn存储库操作时,我遇到了相同的错误git svn clone
/ git svn fetch
。有时它会抱怨couldn't truncate file
,有时会抱怨打开的文件太多,但是其中一个可靠地以合理的方式进入了进程,通常会在一个特别大的修订版本中死掉(最初,重试获取)工作,但最终它将可靠地死于相同的巨大修订)。
要修复后者,我运行了ulimit -n 4096
(ulimit -n
报告了对我的默认限制1024
),将打开文件句柄的限制增加了四倍。但是它似乎不仅解决了couldn't truncate file
,而且还不仅仅是解决了“打开文件太多”错误。虽然检查源代码表明它正在按文件句柄进行截断(因此不必打开新的文件句柄来这样做,否则可能会浪费句柄),但此更改似乎也解决了该问题,因此可能实现了底层实现即使是由开放文件限制本身引起的,也会执行一些违反开放句柄限制并死于truncate
的方式。
答案 5 :(得分:0)
我在Windows 10计算机上浪费了很多时间,并且出现了相同的错误。我尝试了上述建议以及其他许多建议。我的解决方案是从linux docker映像运行它。