Есть ли способ синхронизировать GIT и Subversion репозитории? - PullRequest
31 голосов
/ 26 мая 2009

Я хочу получить доступ к хранилищу, используя клиенты GIT и SVN. Я представлял себе способ сделать это через автоматическую двустороннюю миграцию: когда пользователь нажимает в GIT-хранилище, он также фиксируется в SVN-хранилище и наоборот.

Есть какой-нибудь инструмент, который поможет мне сделать это?

Ответы [ 7 ]

20 голосов
/ 26 мая 2009

Лучший способ сделать это - использовать git svn в качестве клиента Subversion. Это обеспечивает двустороннюю интеграцию между хранилищем Subversion и хранилищем Git. Если у вас есть Git-репозиторий, вы можете отправить его куда угодно, чтобы опубликовать его.

Я делаю это регулярно, на работе есть хранилище Subversion, которое является "главным" хранилищем, и я обычно использую git svn для доступа к нему. Иногда, если я делаю вещи, которые требуют более специфической функциональности Subversion, такие как слияние, я вместо этого использую обычный клиент svn для хранилища.

13 голосов
/ 12 мая 2012

Существует новое решение, которое выполняет именно то, что вы хотите --- SubGit . Он безопасен одновременно (я не могу сказать то же самое о скриптах bash на основе git-svn).

10 голосов
/ 28 августа 2012

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

Настройка описана более подробно на https://github.com/mrts/git-svn-bridge.

Мы использовали эту установку в производстве более года.

Полагаю, самое большое предостережение в настройке заключается в том, что репозиторий git отслеживает только ствол SVN (или другую отдельную ветвь), поэтому другие ветви git будут объединены в один коммит во время слияния с транком. Для нас это не проблема - мы используем кратковременные ветви задач и считаем их легковесными, эфемерными «единицами работы», которые могут переходить на основную линию одним куском, а история ветвей сохраняется в git.

5 голосов
/ 26 мая 2009

Вы могли бы рассмотреть svn2git , чтобы легко импортировать SVN в Git, а затем его зеркальное приложение ruby ​​ git2svn .
Подробнее в этом вопросе .
Как упоминалось в других ответах, 'git svn' является обязательным, но эти модули ruby ​​помогают вам уважать "subversion branch / directory", не имея их в качестве фактического каталога в Git.

4 голосов
/ 04 июля 2011

У меня есть голые центральные репозитории + SVN-git bridge - репозитории с git svn, отслеживающие SVN в ветви 'current' и отслеживающие GIT-репозиторий в ветви 'gitcentral'

Затем я использую хук post-update в центральном репозитории git:

#!/bin/bash

# Anything inserted into GIT - move it back to SVN

echo
echo '* Pushing data into SVN branch'
cd /home/git/BRIDGE
unset GIT_DIR

# current - svn branch locally and central git branch on project.git repos
# centralgit - unmodified centralgit branch
git fetch /home/git/repositories/project.git/ master:centralgit || (echo "Error while pulling data into bridge repository"; exit 1)
git checkout -b temp centralgit || exit 2
git rebase current || exit 3
git checkout current || exit 4
git reset --hard temp || exit 5
git svn dcommit || exit 6
git branch -D temp || exit 7

echo '* Pushed correctly data into SVN'
exit 0

В основном это временно, но работает ...

4 голосов
/ 03 июля 2010

Возможно, вы также захотите проверить это решение: http://unethicalblogger.com/posts/2008/10/git_back_subversion_mostly_automagically_part_33, которое использовалось для синхронизации репозитория между git и subversion, когда несколько разработчиков использовали и git, и subversion, и прокси между ними для выполнения синхронизации .

1 голос
/ 26 мая 2009

Конечно, более простой способ сделать это - оставить основной репозиторий в качестве Subversion, но использовать git-svn локально?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...