Пробел в имени ветви, вызывающий проблемы миграции SVN в GIT - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь перенести старый SVN-репозиторий в GIT, используя svn2git (на моем компьютере с Windows), используя следующую команду:

svn2git https://my/svn/url --verbose --authors authors.txt

и все работало нормально, пока я не обнаружил следующую ошибку:

fatal: Not a valid object name refs/remotes/svn/VS2010 Port
cat-file commit refs/remotes/svn/VS2010 Port: command returned error: 128

Кажется, что кто-то (давным-давно) создал ветку с пробелом в имени, и это вызывает хаос в процессе. Запуск git branch -a показывает ответвление:

remotes/svn/VS2010%20Port

Я провел поиск по Google и StackOverflow и наткнулся на несколько сообщений, в том числе этот один (хотя он ссылается на теги).

Сначала я попытался предложить удалить ветку с помощью git branch -r -d svn/VS2010%20Port (сохранение этой ветви не важно), а затем я повторно выполнил команду svn2git. Он начинает работать и в конечном итоге дает сбой с той же ошибкой. Я также попытался удалить ветку и добавить флаг --exclude '.*VS2010.*' к моей команде svn2git, но это не помогло:

svn2git https://my/svn/url --verbose --authors authors.txt --exclude '.*VS2010.*'

Затем я попробовал другое предложение запустить команду mv, чтобы переместить файл / каталог с% 20 в имени в каталог с фактическим пробелом:

mv VS2010%20Port VS2010\ Port

Так как моя проблема не связана с тегами, я не был на 100%, где запустить это, но я попытался в следующих местах:

  • .git \ SVN \ рефов \ перепятнышки \ SVN
  • .git \ рефов \ перепятнышки \ SVN
  • .git \ журналы \ рефов \ перепятнышки \ SVN

Когда я потом запустил команду svn2git, у меня возникла та же проблема.

Наконец-то я нашел этот пост , посвященный ветвям, но решением было отредактировать файл packed-refs и заменить% 20 ​​пробелами. Хотя я не увидел ветку VS2010%20Port, указанную здесь, поэтому я не смог пройти через это решение.

У кого-нибудь есть предложения по поводу того, что я могу попробовать или что-то пропустил?

Обновление: Я смог добиться некоторого прогресса, добавив флаг --ignore-refs с регулярным выражением, которое будет соответствовать строке VS2010 Port. Это большой репозиторий, так что это заняло очень много времени, но в конце концов все закончилось. К сожалению, я не увидел файлов в каталоге (только каталог .git), поэтому я предполагаю, что что-то пошло не так. Я решил сделать шаг назад и попробовать заново с помощью команды git svn clone, и на этот раз я поставил флаги --ignore-refs и --ignore-paths с самого начала. Надеюсь, на этот раз я получу лучшие результаты.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Просто чтобы положить конец этому вопросу, я смог заставить этот процесс работать благодаря различным комментариям и предложениям. В конце концов я отошел от svn2git и смог перенести свой репозиторий (до точки, которой я доволен), используя git svn clone вместе с опцией --ignore-refs. Мне не совсем понятно, почему svn2git или git svn init с последующим git svn fetch не сработали, но в итоге я получил.

0 голосов
/ 17 мая 2018

Похоже, что этот скрипт svn2git поддерживает опцию "--branches", где вы можете передавать имена (относительные пути) ветвей SVN, которые вы хотите импортировать. Что-то вроде --branches X --branches Y --branches Z должно импортировать 3 ветви: X, Y и Z.

Также попробуйте параметр --nobranches --trunk trunk, который не импортирует ветви, только ствол.

--exclude, вероятно, не сработало, потому что кажется, что он фильтрует пути к каталогам внутри репо, а не имена филиалов.

В любом случае svn2git Сценарий не черный ящик, он довольно короткий и хорошо написан: https://github.com/nirvdrum/svn2git/blob/master/lib/svn2git/migration.rb

Не стесняйтесь читать, отлаживать его с помощью операторов print / put и изменять в своем случае.

Сценарий основан на командах git svn .

...