Перенос svn-репозитория в git-репозиторий в scm-manager

Я установил scm-manager 1.45 в качестве службы на моем сервере Windows 2012 r2.

У меня есть файл дампа хранилища Subversion. Мне удалось импортировать это в репозиторий Subversion в scm-manager. Но я бы очень хотел перенести это в git-репозиторий, но не могу понять, как это сделать. Я хочу, чтобы вся история коммитов следовала.

2 ответа

Решение

Убедитесь, что у вас есть права на чтение / запись, где расположены репозитории SCM-менеджера.

  1. Создайте новый каталог MyProject, в котором расположены репозитории SCM-менеджера;
  2. Шаг в MyProject;
  3. Выполните команду git svn clone theURLfromSCMmanagerSvnRepo;
  4. Добавьте новый репозиторий через SCM-менеджер "Импортировать репозитории" -> Выберите "Git" в мастере импорта репозитория -> "Импорт из каталога".
  5. Теперь он должен обнаружить ваш новый репозиторий.

За пределами инструмента, который вы используете для хранения вашего общего репозитория, 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-сервера в качестве удаленного, здесь вы можете найти некоторую помощь для этого.

Другие вопросы по тегам