Ответ 1
У меня также была эта проблема (git версия 1.8.3) и была решена путем понижения подрывной деятельности до 1.7.9 (из 1.8.0).
Надеюсь, кто-нибудь может мне помочь.
Когда я пытаюсь перенаправить локальную ветвь 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 содержит следующие пакеты:
При поиске этой проблемы в Интернете я обнаружил несколько таких ошибок, когда путь не мог быть канонизирован. Но я не нашел решения для этой проблемы.
Кто-нибудь знает, как его решить? Отсутствует ли какая-либо информация?
У меня также была эта проблема (git версия 1.8.3) и была решена путем понижения подрывной деятельности до 1.7.9 (из 1.8.0).
Если вы не можете перейти на SVN 1.7.X, другой вариант выполняет команду Git -SVN следующим образом:
git svn dcommit -C1 -l1
В основном это отключает обнаружение переименования Git (так что это обходной путь, а не исправление). Вы потеряете информацию о переименовании трека (переименование будет зафиксировано как удаление, за которым следует новый файл, например SVN 1.4). Но фиксация будет работать.
Изменить. Несмотря на некоторые комментарии здесь, я считаю, что это будет работать с текущей версией Git в репозитории Cygwin (1.7.9.1). Если в какой-то день это изменится, я соответственно обновлю ответ.
На самом деле, давайте надеемся, что ситуация улучшится до такой степени, что мы не будем нуждаться в каком-либо исправлении или обходном пути, а Git -SVN работает только (как раньше).: -)
Простой способ установить исправленную версию git -svn из github:
Найдите багги script:
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
Мне удалось решить эту проблему без понижения svn. Ошибка msg была такой:
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 больше не жаловался.
Не удалось сэкономить svn: ошибка в крепостном бэкэнде, поэтому нужно также переключиться на неоновый бэкэнд.
Ошибка была исправлена в svn upstream: 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, вы можете применить его локально к вашей установленной версии, прежде чем какой-либо из вышеперечисленных выпусков и будет распространяться в вашу среду.
Я испытал то же самое на OSX с fink и решил его, понизив svn и perl swig svn привязки до 1.7.11 с 1.8 (и затем перестраивая, на всякий случай, 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-tracked, см. здесь).
Я боролся с принятым ответом. Я просто чувствовал, что принятые ответы говорят вам, что делать, а не как это делать. Мне было намного легче перейти на главную версию git, чем подрывная версия downgrade в cygwin. Имейте в виду, что один из них исправит проблему. Я документировал, как создать главную версию git здесь: Как мне создать и использовать последнюю версию git на cygwin?
У меня была та же проблема и я решил ее вернуться к git -svn 1.7.5.1 (svn 1.7.10).
Не уверен, но я думаю, проблема в том, что репозиторий был клонирован с предыдущей версией svn (1.7.xxx), и по какой-то причине новая версия (1.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);