Можно ли вытащить из / push в хранилище SourceGear Vault с помощью Mercurial? - PullRequest
7 голосов
/ 09 июля 2010

Я заметил, что такого рода функциональность существует для Subversion, и она работает очень хорошо.Мне было интересно, есть ли такая вещь для SourceGear Vault.

1 Ответ

11 голосов
/ 09 июля 2010

Нет, боюсь, у нас есть только двусторонние мосты для 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 и т. Д.).

Надеюсь, это руководство поможет вам или кому-то еще!: -)

...