svn2git - сбой команды - ошибка: pathspec 'master' не соответствует ни одному файлу (файлам), известному git

Мы пытаемся перейти с svn на git с помощью утилиты svn2git (https://github.com/nirvdrum/svn2git). Кажется, что утилита каждый раз терпит неудачу с ошибкой ниже. Если кто-то видел такую ​​же ошибку или есть лучшие альтернативы, пожалуйста, поделитесь.

команда
svn2git https://xyz.xyz.com/svn/svnrepo/ --verbose --authors authors.txt

консольный вывод

Running command: git svn init --prefix=svn/ --no-metadata --trunk='trunk' --tags
='tags' --branches='branches' https://xyz.xyz.com/svn/svnrepo/  
Running command: git config --local --get user.name  
Running command: git config --local svn.authorsfile authors.txt  
Running command: git svn fetch  
Running command: git branch -l --no-color  
Running command: git branch -r --no-color  
Running command: git config --local --get user.name  
Running command: git config --local --get user.email  
Running command: git checkout -f master  
error: pathspec 'master' did not match any file(s) known to git.  
command failed:  
git checkout -f master  

P.S. Мой URL-адрес репозитория SVN тоже правильный, он находится прямо над стволом. Я пытаюсь это сделать на 64-битной машине Win7.


person Jaydip Rakholiya    schedule 19.12.2016    source источник
comment
у вас есть основная ветка в репозитории git?   -  person Anthony C    schedule 19.12.2016
comment
Нет, я пытаюсь клонировать репозиторий svn, который должен создать и инициализировать новый репозиторий git локально.   -  person Jaydip Rakholiya    schedule 20.12.2016
comment
Я не мог использовать svn2git, но я попробовал 2 варианта, и оба у меня сработали. 1) Для полной миграции репозитория SVN — atlassian.com/git/tutorials/migrating-overview 2) Для выборочных веток/тегов - janosgyerik.com/   -  person Jaydip Rakholiya    schedule 03.03.2017


Ответы (3)


Поздно, но может кому-то это еще понадобится. Мне удалось отследить это до issue #241. Короче говоря, Windows не понимает одинарные кавычки (') вокруг аргументов, которые скрипт добавляет к команде git. Вероятно, есть разные способы исправить это, но я просто вручную взломал файл migration.rb, а именно следующий фрагмент:

    cmd += "--trunk=#{trunk} " unless trunk.nil?
    unless tags.nil?
      # Fill default tags here so that they can be filtered later
      tags = ['tags'] if tags.empty?
      # Process default or user-supplied tags
      tags.each do |tag|
        cmd += "--tags=#{tag} "
      end
    end
    unless branches.nil?
      # Fill default branches here so that they can be filtered later
      branches = ['branches'] if branches.empty?
      # Process default or user-supplied branches
      branches.each do |branch|
        cmd += "--branches=#{branch} "
      end

Обратите внимание, что вокруг #{trunk}, #{tag} и #{branch} больше нет кавычек. Это помогло.

person Sergei Tachenov    schedule 18.03.2018
comment
Для тех, кто не использует Ruby в Windows: Вот путь, который я использовал: C:\Ruby26-x64\lib\ruby\gems\2.6.0\gems\svn2git-2.4.0\lib\svn2git, чтобы найти файл migration.rb. - person Airn5475; 15.01.2020

Существует множество инструментов под названием svn2git, вероятно, лучший из них — это KDE из https://github.com/svn-all-fast-export/svn2git. Я настоятельно рекомендую использовать этот инструмент svn2git. Это лучшее из того, что я знаю, и оно очень гибкое в том, что вы можете делать с его файлами правил.

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

Если вы не на 100 % знаете историю своего репозитория, svneverever с http://blog.hartwork.org/?p=763 — отличный инструмент для изучения истории репозитория SVN при его переносе в Git.


Несмотря на то, что git-svn (или неправильный svn2git в вашем случае) легче начать, вот еще несколько причин, по которым использование KDE svn2git вместо git-svn лучше, помимо его гибкости:

  • история перестраивается намного лучше и чище по svn2git (если используется правильный), особенно это касается более сложных историй с ответвлениями и слияниями и т.д.
  • теги являются реальными тегами, а не ветвями в Git
  • с git-svn теги содержат дополнительную пустую фиксацию, которая также делает их не частью ветвей, поэтому обычный fetch не получит их, пока вы не дадите --tags команде, поскольку по умолчанию также извлекаются только теги, указывающие на извлеченные ветки. С правильными тегами svn2git они там, где им место
  • если вы изменили макет в SVN, вы можете легко настроить это с помощью svn2git, с git-svn вы в конечном итоге потеряете историю
  • с помощью svn2git вы также можете легко разделить один репозиторий SVN на несколько репозиториев Git.
  • или легко объединить несколько репозиториев SVN в одном корне SVN в один репозиторий Git
  • преобразование в миллион раз быстрее с правильным svn2git, чем с git-svn

Есть много причин, по которым git-svn хуже, а KDE svn2git лучше. :-)

person Vampire    schedule 19.12.2016
comment
Почему вы копируете один и тот же ответ снова и снова? - person bahrep; 23.01.2017
comment
@bahrep это не тот же ответ, но адаптированный к вопросу. На самом деле вопросы совершенно разные, но ответ чаще всего заключается в том, чтобы использовать правильный инструмент, и он работает намного лучше. - person Vampire; 23.01.2017
comment
я не уверен, сработает ли это в вашем случае, но как насчет голосования за закрытие как дубликата? Выберите самый популярный и актуальный вопрос и проголосуйте за похожие вопросы, чтобы закрыть их как дубликаты. - person bahrep; 23.01.2017
comment
Это было бы не совсем правильно, так как вопросы очень разные и все о разных проблемах. Это то же самое решение, которое я предлагаю, с частями ответа, специфичными для вопроса. - person Vampire; 23.01.2017
comment
На самом деле очень раздражает видеть повторяющиеся ответы, подобные этому. Многим из нас, кто попал сюда с помощью поиска, приходится снова и снова просеивать одни и те же ответы, чтобы найти тот, который действительно работает. - person Chris Mauer; 11.04.2019
comment
Если многие из вас хотят сделать однократное преобразование, ответ всегда один и тот же: используйте правильный инструмент для работы вместо ножа для масла, чтобы делать операции на головном мозге. Это работает, но это не совсем уместно. Следуя этому совету, вам нужно прочитать только один из тех ответов, которые очень похожи, но не совпадают. ;-) - person Vampire; 11.04.2019

Не так много «ответа», но вот решение для моего случая. Кстати, это сообщение об ошибке от svn2git было действительно далеко не полезным.

Моя причина получения точно такой же ошибки заключалась в том, что я не использовал полный путь к магистрали при первоначальном импорте.

Репозиторий SVN имел такую ​​структуру:

https://example.com/folderA/projectName
 - trunk
 - tags
 - ...

и я запустил svn2git только с svn2git https://example.com/folderA --username ....

Когда я также включил «/projectName» в путь репо и сделал это:

svn2git https://example.com/folderA/projectName --username ...

... все работало отлично. Так же перед повторной попыткой - удалил существующую папку .git, с предыдущих попыток.

person userfuser    schedule 18.01.2019