«Hg to Hg (Gateway) to SVN» по сравнению с «Git to Git (Gateway) to SVN»

Вопрос похож на этот (без ответа) и этот (та же проблема, не связанная с Git).

Цель состоит в том, чтобы сделать Hg - интерфейс для SVN на некоторое время, прежде чем полностью перейти на Hg.

Настройка, вероятно, должна выглядеть так, как показано ниже (так же, как и в вопросах, упомянутых выше), однако я не уверен в точной топологии промежуточных репозиториев Hg.

Dev1 Hg --> Hg <--> SVN
Dev2 Hg -/

Я знаю, что указанная выше настройка работает с git и git-svn , как описано в этом комментарии :

Dev1 Git --> Git (bare) <--> Git (bridge) <--> SVN
Dev2 Git -/

Настройка:

  1. Либо git svn init или git svn clone репозиторий SVN. Затем это становится «Git / SVN Bridge».

  2. Исправьте здесь любые ветки, теги и т. Д. Ссылки svn / * считаются удаленными, поэтому, если вы хотите отслеживать ветки, отметьте эти пульты и создайте соответствующие локальные ветки. Также проверьте теги и создайте настоящие теги. Вы ДОЛЖНЫ создать локальные ветки для любых ветвей SVN, которые вы хотите синхронизировать между Git и SVN.

  3. Теперь создайте где-нибудь новый пустой репозиторий ( git init ) и с моста нажмите все ветки. в чистый репо ( git push –tags ).

  4. Все пользователи Git теперь клонируют этот пустой репозиторий. Мост будет обслуживаться только одним (или несколькими) людьми, которые понимают, как синхронизировать Git и SVN.

Чтобы обновить магистраль SVN с изменениями на главном сервере и наоборот, с моста:

  1. git svn fetch (получить новые изменения SVN)

  2. git checkout master

  3. git pull master (получить изменения Git из чистого репозитория)

  4. git checkout svn / trunk (отсоединенная голова для проверки)

  5. git merge –no-ff –log master (объединить изменения из мастера). –no-ff обеспечивает фактическую фиксацию, –log копирует отдельные сообщения журнала из каждой фиксации на главном сервере ( –log является необязательным). Затем можно запустить git commit –amend, если вы хотите отредактировать сообщение фиксации.

  6. git svn dcommit (Это подталкивает вашу фиксацию слияния к SVN. Обратите внимание, что фиксация была на отдельной голове и больше не доступна). Вся ваша работа над мастером (начиная с базы слияния мастера и svn / trunk ) фиксируется как одно изменение и теперь доступна пользователям SVN.

  7. git checkout master

  8. git merge svn / trunk (Получает новые обновления из SVN - с измененным сообщением фиксации - и объединяется в мастер)

  9. git push barerepo (делает изменения SVN доступными для пользователей Git)

Что я не знаю, возможно ли как-то воспроизвести вышесказанное на Hg. На мой взгляд (я промежуточный пользователь Git и знаю основы работы с Hg), препятствиями в Hg являются:

  • нет ветвей удаленного отслеживания (возможно ли это с закладками ? репо?)
  • невозможно отправить коммиты слияния через hgsubversion (шаг n. 6 в приведенном выше списке. Что мешает hgsubversion делать то, что делает svn dcommit ?)

Можно ли заставить шлюз Hg-SVN работать так же, как шлюз Git-SVN? Если нет, то почему?

6
задан Community 23 May 2017 в 10:26
поделиться