Перенос svn-репозитория в git-репозиторий в scm-manager
Я установил scm-manager 1.45 в качестве службы на моем сервере Windows 2012 r2.
У меня есть файл дампа хранилища Subversion. Мне удалось импортировать это в репозиторий Subversion в scm-manager. Но я бы очень хотел перенести это в git-репозиторий, но не могу понять, как это сделать. Я хочу, чтобы вся история коммитов следовала.
2 ответа
Убедитесь, что у вас есть права на чтение / запись, где расположены репозитории SCM-менеджера.
- Создайте новый каталог MyProject, в котором расположены репозитории SCM-менеджера;
- Шаг в MyProject;
- Выполните команду git svn clone theURLfromSCMmanagerSvnRepo;
- Добавьте новый репозиторий через SCM-менеджер "Импортировать репозитории" -> Выберите "Git" в мастере импорта репозитория -> "Импорт из каталога".
- Теперь он должен обнаружить ваш новый репозиторий.
За пределами инструмента, который вы используете для хранения вашего общего репозитория, svn-git и немного магии командной строки решат вашу проблему
Я полагаю, что миграция выполняется из Unix-подобной системы, например, Linux, Mac или даже Cygwin, работающей на машине с Windows; Вы можете попробовать использовать 'Git Bash', установленный с msysgit на платформах Windows, если у вас нет подходящей установки Cygwin
1# Получить список участников SVN-репозитория
распакуйте список коммиттеров в репозиторий SVN, для этого запустите (из корня вашего репозитория SVN):
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
Он должен создать файл со списком авторов, например:
jsmith = jsmith <jsmith>
которую вам нужно изменить в нечто вроде:
jsmith = John Smith <john.smith@evil_corporation.com>
Этот шаг важен, так как Git будет использовать его на следующем шаге для преобразования идентификаторов коммиттера SVN в идентификаторы коммиттера Git (обратите внимание, что вы можете создать этот файл вручную, если хотите)
2 # Клонировать репозиторий SVN как репозиторий Git
Для этого выполните:
git svn clone <SVN_repo_URL> -A authors-transform.txt --stdlayout ~/svn-git-migration
Куда:
<SVN_repo_URL>
ваш SVN-репозиторий иauthors-transform.txt
это файл, который вы только что создали.
Обратите внимание, что он будет работать нормально, если вы использовали "стандартную" SVN-номенклатуру веток для своего макета репозитория SVN, если это не так, вам нужно указать git-svn имя "папки", где ваш ветви были созданы путем замены --stdlayout
аргумент:
-T
(для магистрального пути)-b
(для пути веток)-t
(для тегов путь) параметры
(вы можете найти подробное объяснение о команде git-svn clone здесь)
Этот шаг может занять некоторое время (он разрабатывает историю мерзавцев из дельт SVN один за другим), но когда он будет завершен, версия репозитория SVN git будет находиться в вашем домашнем каталоге, в пределах svn-git-migration
папка (укажите любой другой путь в команде, если хотите)
3 # Конвертировать структуру хранилища (теги и основную ветвь) в git
Примечание: эти команды должны выполняться из вашего нового git-репозитория, поэтому вам нужно перейти в папку, в которой вы клонировали репозиторий, на предыдущем шаге.
Subversion не обрабатывает теги так же, как git; Git tahs связаны с одним коммитом (тэг git просто содержит идентификатор коммита), но SVN-теги являются особым королем ветвей, поэтому здесь нам нужно найти ветви тегов репозитория (изучая refs/head /tags) и применить тег на кончике всех из них:
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
Кроме того, нам нужно будет переименовать основную ветку (trunk в SVN в основную ветку git 'master'
git branch -m trunk master
Теперь просто нажмите на ваш новый / перенесенный репозиторий git на ваш git-сервер (scmmanager?) И все готово:-). помните, что вам нужно добавить свой репозиторий git-сервера в качестве удаленного, здесь вы можете найти некоторую помощь для этого.