我希望有人可以帮助我。
当我尝试将我的本地git分支推送到svn服务器时,这将始终导致此错误:
$ git svn dcommit
Committing to http://.../Dev_Stream/01_workspace ...
C path/to/file/AbstractSystemThread.java => other/path/to/file/Thread/AbstractThread.java
assertion "svn_fspath__is_canonical(child_fspath)" failed: file "/usr/src/subversion/subversion-1.8.0-1/src/subversion-1.8.0/subversion/libsvn_subr/dirent_uri.c", line 2502, function: svn_fspath__skip_ancestor
前提条件:
Cygwin安装包含以下软件包:
在互联网上搜索此问题时,我发现了一些错误,例如路径无法规范化。但我没有找到解决这个问题的方法。
有谁知道如何解决它?是否缺少任何信息?
答案 0 :(得分:13)
如果你不能降级到SVN 1.7.X,另一个选择就是以这种方式进行Git-SVN提交:
git svn dcommit -C1 -l1
这基本上会关闭Git重命名检测(因此它是一种解决方法,而非修复)。您将丢失重命名跟踪信息(重命名将被提交为删除,后跟新文件,如SVN 1.4)。但提交将有效。
编辑尽管有一些评论,但我相信这将与Cygwin存储库(1.7.9.1)上的当前Git版本一起使用。如果有一天发生变化,我会相应地更新我的答案。
事实上,让我们希望情况有所改善,以至于我们赢得需要任何修复或解决方法,并且Git-SVN正常工作(就像以前一样) 。 : - )
答案 1 :(得分:7)
我也有这个问题(git版本1.8.3)并通过将 subversion 降级到1.7.9(从1.8.0开始)解决了这个问题。
答案 2 :(得分:4)
从github安装补丁版git-svn的简便方法:
找到错误的脚本:
find /usr -name Editor.pm
将其替换为修补版本:
cd /usr/lib/perl5/vendor_perl/5.18.1/Git/SVN
mv Editor.pm Editor.pm.bak
wget https://raw.github.com/git/git/2394e94e831991348688831a384b088a424c7ace/perl/Git/SVN/Editor.pm
答案 3 :(得分:3)
我已经设法解决了这个问题,没有降级svn。 错误消息是这样的:
git svn dcommit
Committing to http://...
C File1.hpp => File2.hpp
ERROR from SVN:
RA layer request failed: PUT request on '...File2.hpp' failed: 409 Conflict...
然后我在此提交之前进行了重新设置,删除了File1.hpp,进行了新的提交,而在下一个提交中就像新的一样添加了File2.hpp。在这之后 git svn dcommit 不再抱怨了。
答案 4 :(得分:2)
降级svn并不能保证有所帮助:该错误在serf后端,因此必须确保切换到neon后端。
该错误已在svn上游修补:http://thread.gmane.org/gmane.comp.version-control.subversion.devel/145186。
有一个解决方法提交给git upstream:http://thread.gmane.org/gmane.comp.version-control.git/237906/focus=239690。正如它在perl中一样,您可以在发布上述任何内容之前将其本地应用于您已安装的版本,然后传播到您的环境。
答案 5 :(得分:1)
我在使用fink的OSX上遇到过相同的问题,并通过将svn 和将perl swig svn绑定从1.8降级到1.7.11来解决它(之后重建,以防万一,git-svn )。
问题出现在重命名上,并且在1.6格式的存储库上通过dav_svn在服务器1.6.12和1.7.9上发生(我不确定它是否与svn + ssh一起发生)。
git-svn是1.8.3.3版本,这是我的一个要求(因为只有git-svn> = 1.7.7可以合并svn跟踪的分支,见here)。
答案 6 :(得分:1)
我对接受的答案感到挣扎。我觉得接受的答案告诉你要做什么而不是如何这样做。我发现升级到git的主版本要比在cygwin中降级subversion更容易。请记住,任何一个人都会解决问题。我已经记录了如何在这里构建git的主版本:How do I build and use the latest version of git on cygwin?
答案 7 :(得分:0)
我遇到了同样的问题并通过恢复到git-svn 1.7.5.1(svn 1.7.10)解决了这个问题。
不确定,但我认为问题是存储库是使用先前版本的svn(1.7.xxx)克隆的,并且由于某种原因新版本(1.8.0)无法正确处理它。
答案 8 :(得分:0)
diff -u /usr/local/lib/perl5/site_perl/5.16/Git/SVN/Editor.pm.bak /usr/local/lib/perl5/site_perl/5.16/Git/SVN/Editor.pm
--- /usr/local/lib/perl5/site_perl/5.16/Git/SVN/Editor.pm.bak 2014-01-20 15:52:54.000000000 +0100
+++ /usr/local/lib/perl5/site_perl/5.16/Git/SVN/Editor.pm 2014-01-20 15:55:16.000000000 +0100
@@ -304,8 +304,9 @@
my ($self, $m, $deletions) = @_;
my ($dir, $file) = split_path($m->{file_b});
my $pbat = $self->ensure_path($dir, $deletions);
+ my $upa= $self->url_path($m->{file_a});
my $fbat = $self->add_file($self->repo_path($m->{file_b}), $pbat,
- $self->url_path($m->{file_a}), $self->{r});
+ $upa, $self->{r});
print "\tC\t$m->{file_a} => $m->{file_b}\n" unless $::_q;
$self->chg_file($fbat, $m);
$self->close_file($fbat,undef,$self->{pool});
@@ -323,8 +324,9 @@
my ($self, $m, $deletions) = @_;
my ($dir, $file) = split_path($m->{file_b});
my $pbat = $self->ensure_path($dir, $deletions);
+ my $upa= $self->url_path($m->{file_a});
my $fbat = $self->add_file($self->repo_path($m->{file_b}), $pbat,
- $self->url_path($m->{file_a}), $self->{r});
+ $upa, $self->{r});
print "\tR\t$m->{file_a} => $m->{file_b}\n" unless $::_q;
$self->apply_autoprops($file, $fbat);
$self->chg_file($fbat, $m);