Подтвердить что ты не робот

Есть ли способ синхронизировать хранилища GIT и Subversion?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Затем я использую post-update hook в центральных репозиториях 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

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

Ответ 7

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