Конвертация для работы в Git — шаг на пути от SVN к Git
Следующий шаг при переходе от SVN к Git — импорт содержимого репозитория SVN в новый репозиторий Git. Мы осуществляем это с помощью утилиты git svn,
которая поставляется вместе с большинством сборок Git, а затем очищаем результат, используя для этого скрипт svn-migration-scripts.jar
*.
Учтите, что преобразование больших репозиториев может занять много времени, даже когда клонирование выполняется из локального репозитория SVN. К примеру, преобразование репозитория размером 400 МБ с 33 000 коммитов в главной ветке займет около 12 часов.
При умеренном размере репозиториев необходимо выполнить следующие действия на локальном компьютере руководителя процесса перехода. Если репозиторий SVN очень большой и вы хотите сократить время конвертации, можно запустить клон git svn
на сервере SVN вместо того, чтобы делать это на локальной машине руководителя перехода. Это позволит избежать затраты ресурсов при клонировании по сетевому соединению.
* Обратите внимание, что скрипты были написаны, когда была доступна только версия git 1.8.x. По этой причине для работы скриптов необходимо использовать указанную версию git.
Клонирование репозитория SVN
Команда клонирования git svn
трансформирует ствол, ветви и тэги в репозитории SVN в новый репозиторий Git. В зависимости от структуры репозитория SVN, команды конфигурируются по-разному.
Связанные материалы
Перемещение полного репозитория Git
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
Стандартная структура SVN
Если в вашем проекте SVN используется стандартная структура каталога /ствол
, /ветви
и /тэги,
можете использовать опцию --stdlayout
вместо того, чтобы вручную указывать структуру репозитория. Выполните следующую команду в каталоге
~/GitMigration:
git svn clone --stdlayout --authors-file=authors.txt
<svn-repo>/<project> <git-repo-name>
Здесь <svn-repo>
— это URI репозитория SVN, перенос которого вы выполняете, <project>
— имя проекта, который вы желаете импортировать, а <git-repo-name>
— имя каталога нового репозитория Git.
Например, если вы выполняете переход проекта под именем Confluence,
размещенного на https://svn.atlassian.com
, можно запустить следующую команду:
git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit
Нестандартная структура SVN
Если репозиторий SVN имеет нестандартную структуру, необходимо указать расположение ствола, ветвей и тэгов, используя опции командной строки
--ствол ,
--ветви ,
--тэги. Например, если ветви сохранены в директориях /branches
и /bugfixes,
необходимо использовать команду:
git svn clone --trunk=/trunk --branches=/branches
--branches=/bugfixes --tags=/tags --authors-file=authors.txt
<svn-repo>/<project> <git-repo-name>
Проверка нового репозитория Git
После выполнения команды git svn clone
(это может занять некоторое время) в каталоге ~/GitMigration
появится новый каталог с именем
. Это преобразованный репозиторий Git. Вы сможете переключаться на репозиторий
и выполнять любые стандартные команды Git, чтобы изучить проект.
Ветви и тэги не импортируются в новый репозиторий Git, как можно было ожидать. Вы не найдете ветвей SVN на выходе ветвей git,
также как и тэгов SVN на выходе тэгов git tag
. Но если вы запустите git branch -r,
вы сможете найти все ветви и тэги из репозитория SVN. Команда git svn clone
импортирует ветви SVN как удаленные ветви и импортирует тэги SVN как удаленные ветви с префиксами tags/
.
Это упрощает двухстороннюю синхронизацию, но односторонний переход к Git довольно сложный. Поэтому следующий шаг — преобразование удаленных ветвей в местные ветви и актуальные тэги Git.
Очистка нового репозитория Git
Скрипт clean-git,
включенный в файл svn-migration-scripts.jar,
преобразовывает ветви SVN в локальные ветви Git, а тэги SVN — в развернутые тэги Git. Учтите, что эта операция разрушает данные, и вы не сможете вернуть операции подтверждения из репозитория Git обратно в репозиторий SVN.
Если вы следуете данному руководству по выполнению перехода, то подобной проблемы у вас не возникнет, т.к. руководство рекомендует осуществлять одностороннюю синхронизацию от SVN к Git (репозиторий Git рассматривается "только для чтения", пока не завершен этап "Переход") . Но если вы планируете размещение в репозитории Git и репозитории SVN во время процесса перехода, вам не следует выполнять следующие команды. Это дополнительная задача, которая не рекомендуется для типичного проекта.
Чтобы посмотреть, что можно очистить, запустите следующую команду в ~/GitMigration/
:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git
Будут представлены все изменения, которые хочет выполнить скрипт, но фактически он их не выполнит. Чтобы применить эти изменения, необходимо использовать опцию --force
:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
Сейчас вы должны увидеть все ветви SVN в выводе ветвей git,
а также тэги SVN в выводе тэгов git
. Это означает, что вы успешно конвертировали проект SVN в репозиторий Git.
Резюме
На этом этапе вы преобразовали репозиторий SVN в новый репозиторий Git с помощью команды git svn clone,
а затем очистили структуру полученного репозитория, используя файл svn-migration-scripts.jar
. На следующем этапе вы узнаете, как синхронизировать новый репозиторий Git с новыми операциями размещения в репозиторий SVN. Этот процесс похож на процесс преобразования, но включает в себя несколько важных рекомендаций по рабочему процессу в этот переходный период.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.