Как клонировать темы в mercurial?

Предыстория: Меркуриальные темы

У Mercurial хороший вызов функцииtopicsкак частьevolveрасширение. Они действуют как временные легкие локальные ветки и являются неотъемлемой частью , обеспечивая хорошее взаимодействие с Git (черезhg-git) Например. Они активируются включением следующего в ваш ~/.hgrcфайл (или для каждого репо в .hg/hgrc):

      # ~/.hgrc
...

[extensions]
evolve =
topics =

Поскольку они предназначены для локальной работы, при отправке фазы не отправляются на сервер (а становятся временными ветками в git с рабочего процесса Heptapodрабочим процессом Heptapod ).

Вопрос

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

Частью ответа является установка исходного репо на непубликацию: (Возможно, это следует сделать в клонированном репо после клонирования).

      # source_repo/.hg/hgrc

[phases]
publish = false

При этом сохраняется фаза наборов изменений, являющихся частью тем, но имена тем не клонируются.

МнЗЕ

      mkdir a
cd a
touch A.txt
hg init
hg add A.txt
hg topic "A"
hg commit -m "Initial commit of A"
echo > .hg/hgrc <<EOF
[phases]
publish = false
EOF
cd ..
hg clone a b

Сейчас в a, есть тема `A``, и фиксация находится на стадии черновика ( показана оранжевым цветом в выводе ):

      $ hg log -v
changeset:   0:62c4...    # orange, indicating draft phase
tag:         tip
topic:       A
user:        Michael <...>
date:        Wed ...
files:       A.txt
description:
Initial commit of A

пока в b, все то же самое, в том числе draft фаза, но без темы:

      $ hg log -v
changeset:   0:62c4...    # orange, indicating draft phase
tag:         tip
user:        Michael <...>
date:        Wed ...
files:       A.txt
description:
Initial commit of A

2 ответа

Считайте это обходным путем, возможно, но он должен работать.

Если вы просто работаете локально, вам не нужно . Вы можете просто сделать полную копию всей рабочей папки (папки, содержащей папка).

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

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

Ответ может быть

      hg clone --stream a b

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

Другие вопросы по тегам