如何修复git svn dcommit上的“找不到文件”?

时间:2011-01-12 01:12:23

标签: git-svn

我正在尝试git svn dcommit,但是,一个目录继续失败,因此停止我的提交并继续收到此错误:

  

Filesystem没有项目:找不到文件:事务'43999-6',路径'/ path / to / folder'在/ usr / local / git / libexec / git-core / git-svn第572行

我尝试重新添加该文件夹,但我继续收到该错误。我可以从树中删除提交以绕过它吗?不知道还有什么可以做的。

修改
以下某些内容并未完全回答我的问题,但它们似乎正朝着正确的方向发展:

最后一个问题似乎是我想要的,但是我的回购的大小(上一次,带我整个工作日来检查整个事情),以及我将失去的少量工作执行hard重置(最终似乎可以解决问题),我选择hard重置选项。

5 个答案:

答案 0 :(得分:1)

我认为git-svn实际上不支持重命名文件。每当我尝试重命名时,我都会收到此错误。我总是不得不用svn重命名它,然后用git-svn重新命名。

<强>更新

这可能是因为git-svn与URL中的空格不能很好地协作。我经常需要重命名项目路径才能使它们与git-svn一起使用。当然,对于实际上有其他人工作的项目来说,这不是一个可接受的解决方案。对于那些我只需要使用svn来移动文件。这是一个巨大的麻烦。

答案 1 :(得分:1)

svn reset --hard对我不起作用

这样做的原因是,在对svn进行dcommit时,似乎删除文件的提交似乎同时在git和svn中完成,但链接丢失了。

对我有用的解决方案是在问题出现之前将master重置为提交,然后将所有过度提交合并回master(除了错误的提交),然后重做文件删除。 可能会有一个更优雅的解决方案...

旁注: git svn DOES svn正确重命名/移动文件。 它(tortoisegit + mysgit或jgit / egit)一直自动执行;)

答案 2 :(得分:1)

通过修补git-svn,我能够解决git svn不能用于存储空间的存储库的问题。

我将url_path功能更新为:

sub url_path { 
  my ($self, $path) = @_; 

  my $url = $self->{url} . '/' . $self->repo_path($path); 
  if ($self->{url} =~ m#^https?://#) { 
    $url =~ s!([^~a-zA-Z0-9_./-])!uc sprintf("%%%02x",ord($1))!eg; 
    $url =~ s!^(https?)%3A//!$1://!; 
  } 
  $url 
} 

这可确保正确编码url中的空格。

它似乎对我有用,但尚未经过彻底测试。

答案 3 :(得分:1)

我认为问题应该在Git&gt; = 1.8.0

中修复

你应该考虑升级它。

主页:https://github.com/git/git

答案 4 :(得分:0)

我知道这是一个老问题,但我最近遇到了这个问题,并希望分享我如何解决问题。不可否认,这不是一个很好的解决方案,但它允许我完成我的提交。我做了以下事情:

  1. 使用svn。
  2. 将投诉中的文件夹/文件添加回svn
  3. 将我的原始代码从git提交到svn(git svn dcommit --rmdir)
  4. 删除了git中的文件夹/文件并将其提交给svn。
  5. 这意味着我有额外的2个小提交,一个要添加,然后另一个删除有问题的文件夹/文件但在此之后一切都按预期工作了。我知道这不是一个很好的解决方案,它没有解决问题的根源,但至少它允许我提交我的代码。希望这可以帮助其他人在这种情况下需要快速解决。