Pertanyaan git svn dcommit gagal karena kesalahan penegasan "svn_fspath__is_canonical (child_fspath)" (cygwin)


Saya harap siapapun dapat membantu saya.

Ketika saya mencoba untuk mendorong cabang git lokal saya ke server svn ini akan selalu menghasilkan kesalahan ini:

$ 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

Prekondisi:

  • git repositori lokal yang bersih (tidak ada perubahan bertahap atau tidak berubah)
  • disebut git svn rebase sebelumnya

Instalasi Cygwin berisi paket-paket ini:

  • git, git-svn 1.7.9-1
  • subversi, subversi-perl 1.8.0-1

Ketika mencari masalah ini di internet, saya menemukan beberapa kesalahan seperti ini di mana jalan tidak bisa kanonik. Tapi saya tidak menemukan solusi untuk masalah ini.

Adakah yang punya ide bagaimana mengatasinya? Apakah ada informasi yang hilang?


17
2017-07-17 07:02


asal


Jawaban:


Saya juga punya masalah ini (git versi 1.8.3) dan memecahkannya dengan menurunkan versi subversi ke 1.7.9 (dari 1.8.0).


7
2017-08-02 15:10



Jika Anda tidak dapat downgrade ke SVN 1.7.X, opsi lain adalah melakukan Git-SVN dengan cara ini:

git svn dcommit -C1 -l1

Ini pada dasarnya mematikan deteksi ganti nama Git (jadi ini adalah solusi, bukan perbaikan). Anda akan kehilangan mengubah nama informasi trek (nama akan dilakukan sebagai penghapusan diikuti oleh file baru, seperti SVN 1.4). Tetapi komitmen akan berhasil.

Edit Terlepas dari beberapa komentar di sini, saya yakin ini akan bekerja dengan versi Git saat ini di repositori Cygwin (1.7.9.1). Jika suatu hari nanti berubah, saya akan memperbarui jawaban saya.

Bahkan, mari berharap situasi membaik ke titik yang kita biasa perlu perbaikan atau solusi, dan Git-SVN hanya berfungsi (seperti dulu). :-)


13
2017-12-21 01:07



Cara mudah untuk menginstal versi tambalan git-svn dari github:

  1. Temukan skrip buggy:

    find /usr -name Editor.pm
    
  2. Gantilah dengan versi tambalan:

    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
    

4
2018-02-10 10:43



Saya telah berhasil mengatasi masalah ini tanpa meruntuhkan svn. Error msg seperti ini:

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...

kemudian saya sudah meretas sebelum commit ini, menghapus File1.hpp, membuat commit baru dan yang berikutnya hanya menambahkan File2.hpp seperti yang baru. Sesudah ini git svn dcommit tidak mengeluh lagi.


3
2017-08-13 05:33



Downgrading svn tidak dijamin untuk membantu: bug di backend serf jadi kita harus memastikan untuk beralih ke backend neon.

Bug telah ditambal di svn upstream: http://thread.gmane.org/gmane.comp.version-control.subversion.devel/145186.

Ada solusi yang diserahkan ke git upstream: http://thread.gmane.org/gmane.comp.version-control.git/237906/focus=239690. Seperti dalam perl, Anda dapat menerapkannya secara lokal ke versi yang Anda instal, sebelum hal-hal di atas dilepaskan dan menyebar ke lingkungan Anda.


2
2017-12-26 16:26



Saya telah mengalami hal yang sama di OSX dengan fink, dan memecahkannya dengan menurunkan versi svn dan perl swig svn bindings ke 1.7.11 dari 1.8 (dan setelahnya membangun kembali, berjaga-jaga, git-svn).

Masalah muncul pada mengganti nama, dan terjadi baik pada server 1.6.12 dan 1.7.9, melalui dav_svn, pada repositori format 1.6 (Saya tidak yakin apakah itu terjadi dengan svn + ssh juga).

git-svn ada di versi 1.8.3.3, yang merupakan persyaratan dalam kasus saya (karena hanya git-svn> = 1.7.7 dapat menggabungkan cabang-cabang yang dilacak svn, lihat sini).


1
2017-08-01 10:02



Saya berjuang dengan jawaban yang diterima. Saya hanya merasa seperti jawaban yang diterima memberitahu Anda apa untuk dilakukan tetapi tidak bagaimana untuk melakukannya. Saya merasa lebih mudah untuk meng-upgrade ke versi master git daripada downgrade subversi di cygwin. Perlu diingat bahwa salah satu akan memperbaiki masalah. Saya telah mendokumentasikan cara membuat git versi master di sini: Bagaimana saya membangun dan menggunakan git versi terbaru di cygwin?


1
2018-01-10 22:25



Saya memiliki masalah yang sama dan memecahkannya dengan kembali ke git-svn 1.7.5.1 (svn 1.7.10).

Tidak yakin tapi saya pikir masalahnya adalah bahwa repositori dikloning dengan versi sebelumnya dari svn (1.7.xxx) dan untuk beberapa alasan versi baru (1.8.0) tidak dapat mengatasinya dengan benar.


0
2017-07-22 09:48



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);

0
2018-01-20 15:13