Вопрос похож на этот (без ответа) и этот (та же проблема, не связанная с Git).
Цель - сделать Hg
фронтомконец для SVN в течение периода времени, прежде чем полностью перейти на Hg.
Вероятно, установка должна выглядеть так, как показано ниже (так же, как в приведенных выше вопросах), однако я не уверен насчет точной топологии промежуточных репозиториев Hg.
Dev1 Hg --> Hg <--> SVN
Dev2 Hg -/
Я знаю, что вышеуказанная настройка работает с git
и git-svn
, как описано в этом комментарии :
Dev1 Git --> Git (bare) <--> Git (bridge) <--> SVN
Dev2 Git -/
Настройка:
Либо git svn init
, либо git svn clone
репо SVN.Затем он становится «Мостом Git / SVN».
Исправьте здесь любую из веток, тегов и т. Д.Ссылки svn/*
считаются удаленными, поэтому, если вы хотите отслеживать ветви, проверьте эти пульты и создайте соответствующие локальные ветви.Также проверьте теги и создайте актуальные теги.Вы ДОЛЖНЫ создать локальные ветви для любых веток SVN, которые вы хотите синхронизировать между Git и SVN.
Теперь создайте новый пустой репозиторий (git init
) где-нибудь и с моста,подтолкнуть все ветви к голому репо (git push –tags
).
Все пользователи Git теперь клонируют этот голый репозиторий.Мост будет обслуживаться только одним (или несколькими) людьми, которые понимают, как синхронизировать Git и SVN.
Чтобы обновить соединительную линию SVN с изменениями на ведущем устройстве, и наоборот, измост:
git svn fetch
(получить новые изменения SVN)
git checkout master
git pull master
(получить Git-изменения из репо)
git checkout svn/trunk
(извлечение отдельного руководителя)
git merge –no-ff –log master
(объединить измененияот мастера).–no-ff
обеспечивает фактическую фиксацию, –log
копирует отдельные сообщения журнала с каждой фиксации на главном сервере (–log
необязательно).git commit –amend затем можно запустить, если вы хотите отредактировать сообщение коммита.
git svn dcommit
(Это подталкивает ваш коммит слияния к SVN. Обратите внимание, что коммит был на отдельной головеи больше не доступен).Вся ваша работа над мастером (начиная с базы слияния с мастером и svn/trunk
) фиксируется как одно изменение и теперь доступна пользователям SVN.
git checkout master
git merge svn/trunk
(Получает новые обновления из SVN - с измененным сообщением о фиксации - и объединяется с мастером)
git push barerepo
(делаетизменения SVN доступны для пользователей Git)
Чего я не знаю, так это возможности репликации вышеупомянутого на Hg.Насколько я понимаю (я являюсь промежуточным пользователем Git и знаю основы работы с Hg), препятствия в Hg:
- нет веток удаленного отслеживания (это возможно с закладками? Отдельные клонированные репозитории?)
- невозможно выдвинуть коммиты слияния через
hgsubversion
(шаг № 6 в приведенном выше списке. Что мешает hgsubversion
делать то, что svn dcommit
делает?)
Можно ли заставить шлюз Hg-SVN работать так же, как шлюз Git-SVN?Если нет, то почему?