Существует способ выполнить слияние с git, но фиксация (upstream) с Subversion, который сложен в настройке, но эффективен (и намного проще, чем слияние с Subversion!) На практике.Во-первых, прочитайте обзор git + svn Дерика Бэйли , потому что вам нужно будет настроить git и SVN игнорировать файлы в соответствии с его указаниями.
Обратите внимание, что не используйте стандартный пакет git-svn, но копируйте многое из того, что он делает, вручную.Если вы уже используете git-svn, не используйте этот метод.Кроме того, этот метод стоит использовать только в том случае, если вы будете многократно объединяться из ветви в ствол (и особенно если вы собираете вишню из ствола в ветвь), потому что это использует историю git при выполнении дополнительных слияний.
Затем основные шаги следующие:
- SVN Checkout
/trunk/
в папку с рабочей копией;Я предполагаю, что это C:\trunk
. git init
репозиторий git в этой папке;настроить .gitignore
;git add -A
;git commit
(см. git + svn выше). - Создание клона git хранилища (в другой папке):
git clone C:\trunk foo
.Я предполагаю, что этот клон находится в C:\foo
. - Удалите все в
C:\foo
кроме подпапки .git
, затем SVN Checkout /branches/foo
в C:\foo
. - в C: \ foo, запустите
git add -A; git commit
, чтобы сохранить изменения в ветке в репозитории git.Это создает исходную историю git, которая отличается от истории в C: \ trunk.
Теперь у нас есть две папки, которые являются как репозиториями git, так и рабочими копиями Subversion;кроме того, git считает, что папки являются клонами одного и того же хранилища.
Выполните работу в папках C:\trunk
и C:\foo
(или просто svn update
, чтобы получить работу других).Периодически запускайте git add -A; git commit
, чтобы сохранить изменения в ваших репозиториях git.
Теперь вы хотите объединить ветку foo обратно в trunk.В C: \ trunk запустите git pull C:\foo
.Это вытягивает и объединяет все изменения из папки C:\foo
, которая является вашим git-репозиторием, отслеживающим ветку /branches/foo
Subversion.При необходимости разрешите все конфликты и завершите коммит git.
Теперь вы можете зафиксировать изменения в C: \ trunk в Subversion, не используя Subversion для выполнения слияния.