«Hg to Hg (шлюз) в SVN» по сравнению с «Git to Git (шлюз) в SVN» - PullRequest
6 голосов
/ 01 декабря 2010

Вопрос похож на этот (без ответа) и этот (та же проблема, не связанная с 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».

  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 (шаг № 6 в приведенном выше списке. Что мешает hgsubversion делать то, что svn dcommit делает?)

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

1 Ответ

1 голос
/ 25 декабря 2010

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

...