Synchronize Git repositories
Синхронизировать репозиторий Git с новыми операциями в первоначальном репозитории SVN очень просто, что обеспечивает удобство во время переходного периода, когда вы можете продолжать пользоваться текущим рабочим процессом SVN и параллельно начинать экспериментировать с Git.
Можно выполнять синхронизацию в обоих направлениях. Но мы рекомендуем одностороннюю синхронизацию от SVN к Git. Во время переходного периода следует использовать только репозиторий SVN, а не репозиторий Git. Когда вы уверены, что ваша команда готова к переходу, вы можете завершить процесс перехода и начинать размещение изменений в Git вместо SVN.
Пока вам следует продолжать размещение данных в репозитории SVN и синхронизацию репозитория Git по мере необходимости. Этот процесс схож с этапом преобразования, но т.к. вы имеете дело только с фрагментарными изменениями, процесс должен быть более продуктивным.
Обновление файла авторских данных
Файл authors.txt,
который использовался для преобразования имен пользователей SVN в полные имена и адреса электронной почты, важен для процесса синхронизации. Если он был перемещен из ~/GitMigration/authors.txt,
которое мы использовали ранее, вам необходимо обновить его расположение с помощью:
git config svn.authorsfile
Если новые разработчики вносили изменения в репозиторий SVN после прошлой синхронизации (или первоначального клонирования), необходимо обновить файл авторских данных. Это можно сделать вручную, добавляя новых пользователей в authors.txt,
или же можно использовать опцию --authors-prog,
как описано в предыдущем разделе.
Для разовой синхронизации зачастую проще непосредственно отредактировать авторский файл, а опцию--authors-prog
рекомендуется использовать при выполнении неконтролируемых синхронизаций (запланированные задачи).
Связанные материалы
Перемещение полного репозитория Git
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
Автоматическое генерирование авторов Git
Если ваш файл авторских данных не нуждается в обновлении, можете перейти к следующему разделу.
Команда git svn
включает опцию --authors-prog,
указывающую на скрипт, который автоматически преобразовывает имена пользователя SVN в авторов Git. Необходимо настроить этот скрипт, чтобы он принимал имя пользователя SVN как единственный аргумент и возвращал его в одной строке в форме Имя
(так же, как в правой части существующего файла авторских данных). Эта опция очень полезна, если вы периодически добавляете в проект новых разработчиков.
Если желаете использовать опцию --authors-prog,
создайте файл с именем authors.sh
в ~/GitMigration
. Добавьте следующую строку в authors.sh,
чтобы вернуть фиктивное имя Git и адрес электронной почты авторам, которые отсутствуют в файле authors.txt
:
echo "$1 <$1@example.com>"
При этом будет создано только фиктивное имя и адрес электронной почты, основываясь на имени пользователя SVN, поэтому вы можете изменять его, если есть возможность предоставить более содержательное обозначение.
Извлечение новых поступлений SVN
В отличие от SVN, в Git имеется различие между загрузкой предыдущих поступлений и интеграцией их в проект. Первое называется «извлечением», а второе может быть выполнено посредством слияния или перебазированием. В каталоге ~/GitMigration
выполните следующую команду, чтобы извлечь все новые поступления из оригинального репозитория SVN.
git svn fetch
Она похожа на команду git svn clone
из предыдущего этапа в том, что она обновляет только удаленные ветви репозитория Git — локальные ветви при этом не будут отражать обновлений. С другой стороны, удаленные ветви должны точно соответствовать истории репозитория SVN.
Если вы используете опцию --authors-prog
необходимо включить ее в вышеуказанную команду:
git svn fetch --authors-prog=authors.sh
Синхронизация с извлеченными поступлениями
Для применения загруженных поступлений к репозиторию, запустите следующую команду:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
Эта команда переместит извлеченные поступления на ваши локальные ветви, чтобы они соответствовали своим удаленным аналогам. Теперь вы должны видеть новые поступления в результатах git log
.
Очистка репозитория Git (повторная)
Рекомендуется снова запустить скрипт git-clean,
чтобы удалить устаревшие тэги или ветви, которые были удалены из первоначального репозитория SVN с момента прошлой синхронизации:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
Теперь ваш локальный репозиторий Git должен быть синхронизирован с репозиторием SVN.
Резюме
В этот переходный период очень важно, чтобы разработчики выполняли размещение только в оригинальном репозитории SVN. Репозиторий Git должен обновляться только в рамках синхронизации, как описано выше. Это намного проще, чем управлять рабочим процессом с двухсторонней синхронизацией, и в то же время у вас есть возможность начать интеграцию Git в процесс разработки.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.