2010-07-09 2 views

ответ

11

Нет, боюсь, у нас есть только двухсторонние мосты для Subversion и Git. Я не слышал, чтобы кто-нибудь писал мост для SourceGear Vault.

Тем не менее, вы по-прежнему можете использовать Mercurial поверх другой системы. Это общий метод, который работает для всех систем управления версиями (VCS). Что вы делаете:

Оформить последнюю версию кода из вашей системы управления внешней версией. Инициализировать Mercurial репозиторий, добавьте все файлы, и сделать коммит:

# checkout foreign VCS 
$ hg init 
$ hg addremove 
$ hg commit 

Рабочая копия теперь одновременно Mercurial рабочую копию , а как рабочую копию для внешней системы. Вы будете заниматься разработкой Mercurial и периодически импортировать его в зарубежную систему, и вы будете периодически импортировать изменения из внешнего VCS в Mercurial.

Мы будем использовать ветку с именем default для отслеживания истории внешней системы и названной ветви с именем hg для отслеживания развития, которое мы делаем в Mercurial.

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

Сделает 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, вас должны объединить их обратно в вашу ветку hg. Вы сначала обновляетесь до ветки 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 (обновление, фиксация и т. д.).

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

+0

Благодарим вас за ответ. Думаю, мне придется найти другие способы убедить моих коллег попробовать меркуриальность (чтобы мы все могли убедить руководство, что нам не нравится Сейф). :/ – Paulius

+0

Paulius: Я добавил руководство по использованию Mercurial гибридным способом поверх существующего VCS - надеюсь, вы сочтете это полезным. –

+0

Да, хорошо выглядит. Меня беспокоит то, что мне придется вручную отслеживать все переименования, которые я буду делать на ветке hg, и импортировать их в чужие VCS. Даже не уверен, сможет ли Vault автоматически найти переименования. Во всяком случае, гид выглядит хорошо - я попробую. – Paulius

Смежные вопросы