2017-01-31 1 views
3

Я импортировал свой SVN-репозиторий в новый git-готический репозиторий.Сделать линейную ветвь ведущего git

Мои теги преобразуются в GIT теги, но у меня есть это GIT дорожные линии: enter image description here

Есть ли способ, чтобы вернуть все к одной линии в мастера?

Как это:

enter image description here

(Я новичок с мерзавцем)

Заранее спасибо

ответ

4

Все, что вам нужно сделать, это переместить тег в правильные фиксации (их parent commit). Вы можете сделать это вручную, один за другим, используя команду:

git tag -f v2.8.0 v2.8.0~1 

Заменить v2.8.0 с именем каждого тега.

Если есть много меток для перемещения, вы можете использовать git tag -l > tags.txt, чтобы создать их список и сохранить его в файле tags.txt. Откройте файл в текстовом редакторе и удалите теги, которые вы не хотите изменять (если изображение, отправленное в вопросе, отображает текущую строку истории, только v2.8.2 и v2.8.3 правильно размещены, удалите их из файла). Сохраните файл, а затем запустите:

for t in $(cat tags.txt); do git tag -f $t ${t}~1; done 

Он обработает все теги из файла.

Update:
Для того, чтобы толкать обновленные позиции тегов в восходящем хранилище, выполните команду:

git push --force --tags origin 

Заменить origin с именем (ами) всех удаленных хранилищ, где вы хотите нажмите теги.

+0

Все работает отлично! У вас есть идея нажимать новые теги на голый репозиторий? – barbuslex

+1

Я обновил ответ. – axiac

+0

Спасибо, он отлично работает – barbuslex

1

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

С вашего скриншота Я вижу, что вы, скорее всего, использовали инструмент, основанный на git-svn, например, e. г. nirvdrum svn2git, так как эти «ветви тегов» являются одним из недостатков использования git-svn.

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

Вы легко сможете настроить файл правил svn2git s, чтобы получить результат, который вы хотите получить в своей истории, либо с интегрированием всех субрепозиций SVN в один репозиторий Git, либо с разбивкой проектов с SVN на несколько независимых хранилищ Git.

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


Даже если git-svn легче начать, вот некоторые другие причины, почему с помощью KDE svn2git вместо git-svn превосходит, кроме своей гибкости:

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

Существует много причин, по которым git-svn хуже, и KDE svn2git является превосходным. :-)

Смежные вопросы