Отправьте подрепозиторий Mercurial по тому же пути, что и его родитель.

Есть ли способ настроить Mercurial для отправки подрепозитория по тому же пути, который указан при отправке его родителя?

Скажем, у нас есть родительский репозиторий с подрепозиторием, а у подрепозитория также есть собственное подрепозиторий:

A
- B
- - C

Теперь в каждом из A, B и C у нас указаны альтернативные пути:

.hg/hgrc

[paths]
default = http://path.to.default/A
devMachine = ssh://[email protected]/A

B .hg/hgrc

[paths]
default = http://path.to.default/B
devMachine = ssh://[email protected]/A/B

C .hg/hgrc

[paths]
default = http://path.to.default/C
devMachine = ssh://[email protected]/A/B/C

Если у меня есть неопубликованные наборы изменений в A, B и C, которые я не хочу отправлять в центральный репозиторий, но я хочу передавать их между моими рабочими и домашними компьютерами разработки, могу ли я каким-либо образом настроить Mercurial таким образом? что, когда я делаю hg push devMachine, он также подтолкнет B и C к devMachine, а не подтолкнет A к devMachine и подтолкнет B и C к default?

До сих пор я устанавливал фазу новой фиксации на secret и делал:

$ cd A/B/C
A/B/C$ hg phase -d
A/B/C$ hg push devMachine
A/B/C$ hg phase -sf
A/B/C$ cd ..
A/B$ hg phase -d
A/B$ hg push devMachine
A/B$ hg phase -sf
A/B$ cd ..
A$ hg phase -d
A$ hg push devMachine
A$ hg phase -sf

По понятным причинам это не оптимально. Было бы намного лучше, если бы выполнение A$ hg push devMachine рекурсивно подтолкнуло бы все вложенные репозитории к пути devMachine (конечно, учитывая, что он был определен в .hg/hgrc).

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


person Jordan    schedule 22.08.2018    source источник


Ответы (1)


Я ДЕЙСТВИТЕЛЬНО хочу переместить их между моими рабочими и домашними машинами разработки, есть ли способ настроить Mercurial таким образом, чтобы, когда я делаю hg push devMachine, он также нажимал B и C на devMachine, а не нажимал A на devMachine и нажимал и B и C по умолчанию?

Ну, это работает так, используя TortoiseHg. Раздел пути hgrc был установлен так же, как вы описали. Но псевдоним пути не использовался в вызове.

Вывод журнала: hg push some-real-absolute-path

Вместо hg push devMachine попробуйте hg push ssh://[email protected]/A

Что касается фаз, в каждом репозитории рабочего (и/или домашнего) компьютера добавьте в hgrc:

[phases]
publish = False

Затем коммиты перейдут в фазу public только при отправке в центральный репозиторий.

Я советую НЕ использовать:

[phases]
new-commit = secret

Секретная фаза не очень хорошо сочетается с подрепозиториями. Я бы использовал его только в корневом репозитории.

person Marcos Zolnowski    schedule 24.08.2018
comment
Нет, это не так, как это работает в TortoisHG (по крайней мере, не в версии 4.6.1 для macOS). Я только что попробовал. Когда я нажимаю, он нажимает A на «ssh://[email protected]/A», как и ожидалось, затем он «направляет подрепозиторий B на path.to.default/B'. Mercurial [path] - это просто псевдоним, поэтому я не вижу причин, по которым явное использование пути в любом случае имело бы значение. - person Jordan; 24.08.2018
comment
Это работает для TortoiseHg 4.6.2 в Linux. Я сделал несколько репозиториев только для проверки, и здесь они работают нормально. - person Marcos Zolnowski; 25.08.2018
comment
Да, похоже, в реализации есть несоответствие между macOS и Linux. Слишком плохо для меня. - person Jordan; 27.08.2018