Я установил svn2git, чтобы быстро преобразовать репозитории SVN в GIT. Я попробовал выполнить процедуру преобразования на другом компьютере (Ubuntu 16.04) и другом репозитории SVN, который работал без проблем.

Прямо сейчас я использую Linux Mint Cinnamon с другим (но очень похожим) репозиторием SVN.

git clone https://my.git.com/repository.git
cd repository
svn2git svn://my.svn.com/repository --authors ../authors_transform.txt

.
.
.

error: unable to create symlink asp/layer/man/rep/onewith_totalmax_victory.php (File name too long)
read-tree -m -u -v HEAD HEAD: command returned error: 128

Я читал о возможности шифрования / home (как ограничение длины файла), но это не мой случай. Пробовал трогать случайную строку

touch Etiam_tortor_est0_placerat_sit_amet_dolor_in0_ultricies_malesuada_nisi-_Aenean_et_urna_enim-_Vivamus_porta0_velit_et_pulvinar_fermentum0_urna_lacus_tempor_sapien0_et_laoreet_tellus_elit_nec_ligula-_Nulla_iaculis0_libero_eget_rutrum_mattis0_nisl_velit_vive

Что составляет 256 символов и создает файл.

Как с этим бороться?

РЕДАКТИРОВАТЬ: проблема также возникает в macOS Sierra.

3
Jan Richter 25 Ноя 2016 в 20:46

3 ответа

Лучший ответ

В конце концов, похоже, что это была проблема с конкретным файлом, который был символической ссылкой и файлом одновременно?

В любом случае, исправление файла в SVN вручную и последующее преобразование устранили проблему.

1
Jan Richter 5 Дек 2016 в 13:13

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

git clone --no-checkout https://my.git.com/repository.git
cd repository
git config core.symlinks false
git checkout <branch>
2
Filip Stefanov 1 Дек 2016 в 22:16

Используемый вами инструмент svn2git использует git-svn под капотом, поэтому он не подходит для «быстрого преобразования» репозитория SVN.

Есть инструменты Pleny под названием 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 лучше. :-)

0
Vampire 28 Ноя 2016 в 11:05