Как исправить "файл не найден" на git svn dcommit?

Я пытаюсь сделать git svn dcommit, однако один каталог продолжает терпеть неудачу на мне, и поэтому останавливает мою фиксацию и продолжает эту ошибку:

В файловой системе нет элемента: Файл не найден: транзакция "43999-6", путь/путь/в/папка "в/usr/local/ git/libexec/git -core/git - svn line 572

Я попытался добавить папку обратно, но я продолжаю получать эту ошибку. могу ли я удалить фиксацию из дерева, чтобы обойти это? Не уверен, что еще делать здесь.

изменить некоторые из нижеперечисленных вопросов не полностью отвечают на мой вопрос, но они, похоже, находятся в правильном направлении:

Последний вопрос, похоже, был тем, что я хотел, но с размером моего репо (последний раз, я провел целый рабочий день, чтобы проверить все это), и небольшой объем работы, которую я бы потерял просто делая hard reset (что, в конечном счете, казалось, делало трюк), я пошел за опцией hard reset.

5 ответов

Я не думаю, что git -svn фактически поддерживает переименование файлов. Я получаю эту ошибку каждый раз, когда пытаюсь переименовать что-то. Мне всегда нужно переименовать его с помощью svn, а затем переустановить с помощью git -svn.

Обновление

Вероятно, это связано с тем, что git -svn не играет хорошо с пробелами в URL-адресах. Мне часто приходится переименовывать пути проекта, чтобы заставить их работать с git -svn. Конечно, это не приемлемое решение для проектов, в которых на самом деле работают другие люди. Для тех, кому я просто должен прибегать к использованию svn для перемещения файлов. Это огромная проблема.


Мне удалось решить проблему 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-адресе.

Кажется, что это работает для меня, но не проверено полностью.


svn reset - hard не работает для меня

причина этого в том, что при выполнении dcommit в svn кажется, что фиксация, которая удалила файл, будет выполняться как в git, так и в svn одновременно, но ссылка потеряна.

Решение, которое сработало для меня, состояло в reset master для фиксации перед проблемой, а затем объединить все принудительные фиксации на master (кроме ошибочного), а затем повторить удаление файла. может быть более элегантное решение...

сторона примечания: git svn. svn правильно переименовывает/перемещает файлы. Он (либо черепаховый + mysgit, либо jgit/egit) делает это автоматически все время;)


Я считаю, что проблема должна быть исправлена ​​в Git >= 1.8.0

Вы должны рассмотреть возможность его обновления.

Домашняя страница: https://github.com/git/git


Я знаю, что это старый вопрос, но у меня недавно была эта точная проблема, и мне хотелось поделиться тем, как я исправил эту проблему. По общему признанию, это нехорошее решение, но это позволило мне завершить мое совершение. Я сделал следующее:

  • Добавлена ​​папка/файл с жалобой в svn с помощью svn.
  • Поступил мой исходный код из git в svn (git svn dcommit --rmdir)
  • Удалил папку/файл в git и передал ее svn.

Это означало, что у меня было еще 2 небольших коммита, один для добавления, а затем еще один, чтобы удалить папку-заглушку/файл, но после этого все снова работало так, как ожидалось. Я знаю, что это нехорошее решение, и оно не затрагивает корень проблемы, но, по крайней мере, это позволило мне передать мой код. Надеюсь, это может помочь кому-то еще в этой ситуации быстро исправить ситуацию.

licensed under cc by-sa 3.0 with attribution.