Нет, боюсь, у нас есть только двусторонние мосты для Subversion и Git .Я не слышал, чтобы кто-нибудь писал мост для SourceGear Vault.
Однако вы все равно можете использовать Mercurial поверх другой системы.Это общий метод, который работает для всех систем контроля версий (VCS).Вы делаете следующее:
Получите последнюю версию кода из вашей внешней системы контроля версий.Инициализируйте репозиторий Mercurial, добавьте все файлы и сделайте коммит:
# checkout foreign VCS
$ hg init
$ hg addremove
$ hg commit
Рабочая копия теперь является рабочей копией Mercurial , а также в качестве рабочей копии для внешней системы.Вы будете заниматься разработкой в Mercurial и периодически импортировать ее в чужую систему, а также будете периодически импортировать изменения из иностранной VCS в Mercurial.
Мы будем использовать ветку с именем default
для отслеживания историисторонняя система и именованная ветвь с именем hg
для отслеживания разработки, которую мы делаем в Mercurial.
Примечание: Антон комментирует ниже, что Vault покажет слишком много файлов, если вы используете именованные ветки дляразделите две линии разработки - используйте два клона вместо этого, если это проблема для вас.
Давайте сделаем ветку hg
:
$ hg branch hg
$ hg commit -m "Started hg branch"
Теперь вы можете разработать что-то:
# work, work, work...
$ hg commit -m 'Fixed bug 42'
# work, hack, work...
$ hg commit -m 'Customers will love this feature!'
Когда вы продолжите в том же духе, ветвь default
начнет расходиться с веткой hg
- разница именно в том, какие изменения еще предстоит экспортировать во внешнюю систему.Вы можете увидеть различия с
$ hg diff default:hg
. Чтобы фактически экспортировать изменения, вы обновляете ветку default
, объединяете в нее hg
и фиксируете изменения в вашей внешней системе:
$ hg update default
$ hg merge hg
$ hg commit -m 'Merge with hg'
# get list of renamed files:
$ hg status --added --copies --change . | grep -A 1 '^ '
# commit to foreign VCS
После этого вы можете выполнить обновление до ветки hg
и продолжить работу с Mercurial
$ hg update hg
# work, work, wok...
Когда изменения вносятся другими лицами в чужой VCS, вы должны объединить их обратно в * 1047.* ветка.Вы сначала обновляете ветку default
.Это гарантирует, что рабочая копия выглядит так, как ее ожидает внешняя VCS.Затем вы можете обновить рабочую копию - это заставит Mercurial увидеть изменения, которые вы вносите в Mercurial:
$ hg update default
# update working copy using foreign VCS
$ hg addremove --similarity 90
$ hg commit -m 'Imported changes from foreign VCS'
Шаг hg addremove
гарантирует, что Mercurial перехватывает любые переименования, произошедшие в иностранном языке.VCS.Вам нужно будет поэкспериментировать с параметром подобия, чтобы найти параметр, который вам подходит.Используйте hg status -C
для просмотра запланированных переименований.
Теперь вам нужно объединить эти изменения обратно в ветку hg
, чтобы вы могли включить их в свою дальнейшую работу на основе Mercurial:
$ hg update hg
$ hg merge default
$ hg commit -m 'Merge with default'
Вы продолжаете работать так: всегда выполняете новую локальную разработку для ветви hg
и всегда обновляетесь до ветви default
, прежде чем использовать чужие команды VCS (update, commit и т. Д.).
Надеюсь, это руководство поможет вам или кому-то еще!: -)