Как я могу добавить удаленные репозитории в Mercurial?

99

Я работаю с репозиториями Git следующим образом:

  • У меня есть главный репозиторий и несколько пультов на разных производственных машинах.
  • Я отправляю производственный код на пульты дистанционного управления и перезапускаю службы, чтобы изменения вступили в силу.

Я собираюсь перейти с Git на Mercurial и хотел бы знать заранее, как я могу достичь чего-то подобного.

топлес
источник

Ответы:

130

Вы добавляете записи в [paths]раздел .hg/hgrcфайла вашего локального клона . Вот пример раздела, который будет помещен в .hg/hgrcфайл:

[paths]
remote1 = http://path/to/remote1
remote2 = http://path/to/remote2

Затем вы можете использовать такие команды, как hg push remote1отправка наборов изменений в это репо. Если вы хотите, чтобы это удаленное репо обновлялось, это рабочий каталог, вам нужно установить changegroupловушку в том удаленном месте, которое выполняет обновление. Это будет выглядеть примерно так:

[hooks]
changegroup = hg update 2>&1 > /dev/null && path/to/script/restart-server.sh

Не все являются большими поклонниками того, чтобы удаленные репозитории автоматически обновляли свои рабочие каталоги при отправке, и это, конечно, не по умолчанию.

Ry4an Brase
источник
23
Для тех, кто просто хочет увидеть использование пультов дистанционного управления, hg pathsчто эквивалентно git remote -v.
Keyo
5
default-push (вместо, например, remote1) позволяет просто набрать "hg push". Затем используется репозиторий по умолчанию. Очень полезно.
Christian
6
@Christian default-pushнеобходим / полезен только в том случае, если ваша обычная цель push отличается от вашего обычного источника pull. Если они такие же (или вы никогда не тянете), тогда defaultдостаточно.
Ry4an Brase
2
Просто чтобы добавить еще об этом: если у вас есть оба default-pushи defaultв вашем файле конфигурации, то первый будет использоваться для нажатия, а второй - для извлечения. Если вы хотите отправлять и извлекать данные из одного и того же удаленного репозитория (что вы, вероятно, делаете, если используете Mercurial централизованным способом), просто вставьте defaultфайл. Было бы так здорово, если бы они добавили небольшую опцию командной строки, чтобы просто сделать это при первом нажатии ... (или, может быть, я слишком большой человек из CVS ;-))
tiktak
У меня на Mac установлен Mercurial v2.6.2, и файл для установки путей находится внутри .hg/hgrc(без точки перед именем файла).
Regis Zaleman
9

если вы хотите добавить путь по умолчанию, вы должны работать с defaultвашим ~project/.hg/hgrcфайлом. Следующим образом:

[paths]
default = https://path/to/your/repo

Удачи.

Акаши
источник
5

Вы можете посмотреть плагин hg-git GitHub :

общая идея hg-git

добавление возможности загрузки и извлечения из репозитория сервера Git из Mercurial.
Это означает, что вы можете совместно работать над проектами на основе Git из Mercurial или использовать сервер Git в качестве точки сотрудничества для команды с разработчиками, использующими как Git, так и Mercurial.

Примечание: я не тестировал этот инструмент с последними версиями Mercurial.

VonC
источник
1
У меня есть возможность портировать все на Mercurial, я хотел бы использовать только один инструмент для управления исходным кодом. Преобразуйте, как только репозиторий построит соответствующие структуры, а затем только ртутные команды для производства. Мне известно, что и git, и mercurial могут сотрудничать, но никогда не пробовал.
топлес
2
^ Крис: так вот ваш вопрос: как мне преобразовать репозитории Git в репозиторий Mercurial? », Или« как объявить / настроить удаленное репо Hg? »(Например, в superuser.com/questions/43686/… ), или« где удаленный указан в Hg? »( crazythinking.wordpress.com/2009/03/07/… )
VonC
0

Если вы используете Unix и у вас установлен Git, вы можете использовать эту функцию bash, чтобы легко добавить путь к пультам без текстового редактора:

add-hg-path() {
    git config -f $(hg root)/.hg/hgrc --add paths.$1 $2
    awk '{$1=$1}1' $(hg root)/.hg/hgrc > /tmp/hgrc.tmp
    mv /tmp/hgrc.tmp $(hg root)/.hg/hgrc
}

Затем вызовите его с помощью:

$ add-hg-path remote1 https://path.to/remote1

Если кто-то захочет создать эквивалент Powershell, я бы тоже хотел включить его. Другие возможные улучшения включают проверку ошибок в параметрах и исключение вызова $(hg root).

Джейсон Р. Кумбс
источник