Можете ли вы предотвратить пуш по умолчанию, но разрешить пул? - PullRequest
5 голосов
/ 21 июля 2010

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

Ответы [ 4 ]

7 голосов
/ 21 июля 2010

Я смог решить эту проблему, добавив в файл .hg/hgrc следующее, но мне было интересно, есть ли лучший / официальный способ.

[paths]
default = http://server/hg/repo
default-push = .
3 голосов
/ 22 июля 2010

Ваше решение, вероятно, самое быстрое и, безусловно, эффективное. Если есть какой-либо официальный способ, которым он будет использовать preoutgoing hook:

[hooks]
preoutgoing = bash -c 'read -p "Really push to $HG_URL? " -n 1 RESP ; [ "$RESP" == "y" ]'

, который спросит вас, хотите ли вы нажать и указать URL-адрес, по которому он будет идти в качестве напоминания.

2 голосов
/ 22 июля 2010

Мне нравится ваш собственный ответ о настройке paths.default-push = . - это просто и понятно, что оно будет работать.

Другим вариантом может быть крючок предварительного нажатия:

[hooks]
pre-push = if [ $HG_PATS == "[]" -o $HG_PATS == "['default']" ]; then
               read -p "Really push to default? " -n 1; echo
               [ "$REPLY" == "y" ]
           fi

(Здесь я воспользуюсь тем, как можно разделить длинное значение на несколько строк, вставив их в конфигурационный файл Mercurial.)

Нажим по умолчанию выглядит так

% hg push
Really push to default? n
warning: pre-push hook exited with status 1

где я набрал n. Хуки проверяют как отсутствие аргументов ($HG_PATS == "[]"), так и значение по умолчанию в качестве аргумента ($HG_PATS == "['default']") и будут запрашивать вас только в этих случаях. Переменная $HG_PATS была введена в Mercurial 1.6.

PS: Я видел, как вы обновили вопрос и попросили найти решение в PowerShell, но, боюсь, я ничего не знаю об этом языке. Однако вы должны быть в состоянии самостоятельно поднять важные понятия из этого ответа.

0 голосов
/ 18 июня 2012

Ответ, ранее опубликованный в настройке hgrc

   default-push = .

, ПОЧТИ, но не совсем правильный.Он может сломаться, например, если вы откроете свой домашний каталог.

Вот мой текущий BKM для отключения push-сообщения по умолчанию:

Я украсил идею установки paths.default-push in~ / .hgrc, что делает его немного более самодокументируемым и менее подверженным ошибкам - поскольку, как я отмечаю ниже, настройка default-push =.не всегда отключает нажатие.

в ~ / .hgrc

[paths]
# my main project master repo
project-master = ...

#DISABLING IMPLICIT PUSH
#     to prevent embarassment from accidentally pushing to the project master repo
#     instead of, in my case, a repo that has fine grain commits
#     that the rest of the team does not want to see in the project master repo
#default-push = .
#     this works mostly, but NOT if you use hg on your home directory
#     since '.' in ~/.hgrc seems to be interpreted as -R ~
#default-push = /NONEXISTENT_default-push_--_must_specify_push_target_explicity
#     this works ok, but I can clean up the error message using blanks
#     keeping this around because blanks in pathnames confuses many UNIX tools
default-push = /'NONEXISTENT default-push -- must specify push target explicitly'
#     this amounts to disabling implicit push targets.
...