Как синхронизировать SVN и Git. | Мелиша Траут | КодексX
В моем последнем посте я упомянул, как можно перейти с SVN на Git. В этом посте я объясню, как синхронизировать любые изменения, сделанные между Git и Subversion (SVN). В вашей команде всегда будет один человек, который не получил заметку и внес некоторые изменения в SVN, пока вы были в середине миграции. Не беспокойтесь об этом, есть решение, и я покажу вам, как это сделать.
Процесс довольно прост и будет включать в себя следующие шаги:
- Создание ветки синхронизации
- Слияние изменений из SVN в Git
- Необязательно: объедините изменения из Git в SVN (при необходимости).
Обратите внимание, что в соответствии с документацией git svn есть команда с именем git svn rebase
. Команда git svn rebase извлекает любые изменения, внесенные в репозиторий SVN, и применяет эти изменения к текущей работе в Git. Эта команда похожа на svn update или git pull, однако всякий раз, когда я пытался использовать эту команду в прошлом, у меня истекало время ожидания. Вот почему я использовал следующий процесс для успешной синхронизации изменений. Однако, если эта команда работает для вас, используйте ее, а если нет, то продолжайте чтение.
Создать ветку синхронизации
Нам нужно будет создать новую ветку внутри git, которую мы назовем svn_sync. Это позволит нам получить любые изменения, сделанные из основной ветки после миграции. Также обратите внимание, что эта ветвь будет использоваться только для настройки подключения к SVN, она не будет использоваться для какой-либо разработки.
git branch --no-track svn_sync
После создания ветки извлеките ветку и инициализируйте репозиторий в репозитории SVN. После инициализации извлеките репозиторий SVN, убедившись, что файл авторов, который использовался в исходной миграции, актуален.
git svn init -s
git svn fetch --authors-file=../authors.txt
При необходимости вы можете указать местоположение файла автора, чтобы вам не пришлось вводить его снова.
git config svn-remote.svn.authorsfile ~/authors.txt
Необязательно: если вы настроили git LFS во время миграции, вам нужно будет выполнить ту же настройку в новой ветке. Если вам нужно запомнить, как это делается, ознакомьтесь с разделом «Преобразование любых больших файлов в объекты LFS» в моем исходном посте:
Слияние изменений из SVN в Git
Проверьте ветку master, а затем объедините svn_sync с master:
git checkout master
git merge svn_sync
Как только все будет объединено и конфликтов не будет, вы можете отправить изменения слияния в удаленный репозиторий:
git push origin master
Необязательно: объедините изменения из Git в SVN (при необходимости).
Если вы столкнетесь с проблемой, из-за которой вам нужно будет объединить изменения из git обратно в SVN, то бойтесь! Это просто процесс, и я помогу вам пройти через него.
Сначала проверьте текущую ветку релиза или самую последнюю ветку в git (это может быть главная ветка) и внесите изменения:
git checkout master
git pull
Затем вам нужно будет проверить ветку svn_sync и получить последние изменения:
git checkout svn_sync
git svn fetch
git svn rebase
Теперь вам нужно будет объединить изменения из ветки релиза или master в ветку svn_sync:
git merge --no-ff master
Если есть какие-либо конфликты, вам нужно будет решить их на этом этапе. Как только они будут разрешены, вам нужно будет зафиксировать изменения локально, а затем зафиксировать изменения в SVN:
git commit -a
git svn commit
Вот и все, вы успешно синхронизировались между SVN и Git. Я надеюсь, что этот пост был полезен. Если вы хотите узнать больше о моих карьерных советах и технических решениях, рассмотрите возможность подписаться на меня, а также подписаться на мою рассылку, чтобы никогда не пропустить мою публикацию.