17

誰かが私を助けてくれることを願っています。

ローカルの 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

前提条件:

  • ローカル git リポジトリをクリーンアップします (ステージングされた変更もステージングされていない変更もありません)
  • 以前は git svn rebase と呼ばれていました

Cygwin のインストールには、次のパッケージが含まれています。

  • git、git-svn 1.7.9-1
  • サブバージョン、サブバージョン-perl 1.8.0-1

インターネットでこの問題を検索すると、パスを正規化できないというこのようなエラーがいくつか見つかりました。しかし、まさにこの問題の解決策は見つかりませんでした。

誰かがそれを解決する方法を知っていますか? 不足している情報はありますか?

4

9 に答える 9

7

私もこの問題(gitバージョン1.8.3)を抱えていましたが、Subversionを1.7.9(1.8.0から)にダウングレードすることで解決しました。

于 2013-08-02T15:10:44.400 に答える
4

github から git-svn のパッチを適用したバージョンをインストールする簡単な方法:

  1. バグのあるスクリプトを見つけます。

    find /usr -name Editor.pm
    
  2. パッチを適用したバージョンに置き換えます。

    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
    
于 2014-02-10T10:43:54.310 に答える
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 の後、もう文句はありませんでした。

于 2013-08-13T05:33:43.380 に答える
2

svn をダウングレードしても問題が解決するとは限りません。バグは serf バックエンドにあるため、neon バックエンドに切り替える必要もあります。

バグは svn アップストリームでパッチされています: http://thread.gmane.org/gmane.comp.version-control.subversion.devel/145186

アップストリームの git に送信された回避策があります: http://thread.gmane.org/gmane.comp.version-control.git/237906/focus=239690。perl にあるため、上記のいずれかがリリースされて環境に伝播する前に、インストール済みのバージョンにローカルで適用できます。

于 2013-12-26T16:26:37.193 に答える
1

私は受け入れられた答えに苦労しました。受け入れられた答えは何をすべきかを教えてくれるが、それをどうやってやるかは教えていないように感じました。cygwin でサブバージョンをダウングレードするよりも、git のマスター バージョンにアップグレードする方がはるかに簡単であることがわかりました。いずれかが問題を解決することに注意してください。ここで git のマスター バージョンをビルドする方法を文書化しました: How do I build and use the latest version of git on cygwin?

于 2014-01-10T22:25:36.677 に答える
1

私は fink を使用して OSX で同じことを経験し、svnperl swig svn バインディングを 1.8 から 1.7.11 にダウングレードすることで解決しました (その後、念のために git-svn を再構築します)。

この問題は名前の変更時に発生し、サーバー 1.6.12 と 1.7.9 の両方で、dav_svn を介して 1.6 形式のリポジトリで発生しました (svn+ssh でも発生するかどうかはわかりません)。

git-svn はバージョン 1.8.3.3 にあり、これは私の場合の要件でした (git-svn >= 1.7.7 のみが svn 追跡ブランチをマージできるため、こちらを参照してください)。

于 2013-08-01T10:02:06.717 に答える
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);
于 2014-01-20T15:13:09.807 に答える