Мигрировать с Subversion на мерзавца, клонировать все ветви и протолкнуть гитолит - PullRequest
9 голосов
/ 07 марта 2012

Я работал над переносом наших 9 проектов в одном репозитории SVN на 9 отдельных репозиториев git, которые управлялись на сервере с помощью gitolite и затем закрывали SVN. Семь из них были просты, так как у них не было веток или меток, поэтому на моей рабочей станции я смог сделать простое:

git svn clone --stdlayout --no-metadata -A svnauthors.txt svn+ssh://user@host/var/subversion/project tempProject

Затем отправили с моей рабочей станции на сервер Gitolite через:

 git remote add origin ssh://gitolite@host/project
 git push -u origin master

и все они прекрасно работают. Теперь два последних проекта сложнее, около 30 тегов / веток каждый. После запуска 'git svn clone', как указано выше, в одном из этих проектов я вижу:

$ git branch -a
* master
  remotes/BatchUpload
  remotes/clarify_breadcrumb
  remotes/contact_type
  remotes/contact_upload_improvements
  remotes/file_cabinet
  remotes/mobile
  remotes/summary_tiles
  remotes/summary_updates
  remotes/tags/release-2.1.2
  remotes/tags/release-3.0.1
  remotes/tags/release-3.0.2
  remotes/tags/release-3.0.2c
  remotes/tags/release-3.1.1
  remotes/tags/release-3.1.3
  remotes/tags/release-3.1.4
  remotes/tags/release-3.1.5
  remotes/tags/release-3.1.5.UPDT
  remotes/tags/release-3.2
  remotes/tags/release-3.2.1
  remotes/tags/release-3.2.2.1
  remotes/tags/release-3.2.3
  remotes/tags/release-3.2.4
  remotes/tags/release-3.2.6
  remotes/tags/release-3.2.7
  remotes/tags/release-3.2.7.1
  remotes/trunk
  remotes/user_man_batch_upload
  remotes/user_management

Теперь, как мне загрузить все эти теги / ветки на мою локальную рабочую станцию, чтобы я мог протолкнуть их через gitolite и окончательно отключить сервер SVN? Что мне нужно сделать в этом руководстве , выполняя 'git checkout -b' для каждой ветви и тега? Должен ли я использовать svn2git или другой инструмент для этого?

Ответы [ 4 ]

13 голосов
/ 23 июля 2012

Полезный человек в #git на freenode irc написал мне небольшую команду, чтобы скопировать мои теги и ветви в Git из SVN:

Push ветки:

printf "git push origin "; git show-ref | grep refs/remotes | grep -v '@' | grep -v remotes/tags | perl -ne 'print "refs/remotes/$1:refs/heads/$1 " if m!refs/remotes/(.*)!'; echo

Выполнить командукоторый выводит

Push-теги:

printf "git push origin "; git show-ref | grep refs/remotes/tags | grep -v '@' | perl -ne 'print "refs/remotes/tags/$1:refs/tags/$1 " if m!refs/remotes/tags/(.*)!'; echo

Запустить команду, которая выводит

3 голосов
/ 28 февраля 2017

Вы можете перечислить все удаленные ссылки, созданные при миграции из svn в git: git show-ref (доступно из git 1.8.2.2).Затем решите подтолкнуть их к источнику.

Чтобы подтолкнуть все ссылки как ветви к источнику:

git push origin refs/remotes/*:refs/heads/*

Чтобы подтолкнуть теги к источнику:

git push origin refs/tags/*:refs/tags/*
-or-
git push origin --tags

Вам может понадобитьсяочистить эти ветви или, возможно, преобразовать некоторые ветви в теги до / после нажатия.

0 голосов
/ 16 февраля 2013

Используйте svn2git.Это преобразует теги в git-аннотированные теги, которые затем корректно передаются с помощью git push --tags

0 голосов
/ 08 марта 2012

Они уже находятся на вашей локальной рабочей станции.То, что вы видите, это только ссылки на коммиты, и вы можете проверять их, когда вам это нужно.

git branch -a

Показывать информацию, которая находится в вашем локальном репо, а не извлекать данные из удаленного репозиторияВы получили всю эту информацию, когда сделали клон.

Так что теперь, когда у нас есть все локальное, вам нужно только передать данные на удаленный компьютер.Вы можете отправить все свои теги на удаленный сервер с помощью:

git push --tags

Для каждого филиала вы можете отправить его в репозиторий с помощью:

git push origin remotes/BatchUpload:BatchUpload
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...