1

背景: Mercurial トピック

Mercurial には、拡張機能topicsの一部として優れた機能呼び出しがあります。これらは一時的な軽量のローカル ブランチとして機能し、 Heptapod ワークフローevolveの不可欠な部分であり、たとえばを介した Git との適切なやり取りを保証します。これらは、ファイル (または のリポジトリごと)に以下を含めることで有効になります。hg-git~/.hgrc.hg/hgrc

# ~/.hgrc
...

[extensions]
evolve =
topics =

これらはローカル作業用に設計されているため、プッシュすると、トピックはサーバーにプッシュされません (ただし、Heptapod ワークフローを使用して git で一時的なブランチになります)。

質問

リポジトリをローカルでクローンして、クローン内のトピックを取得するにはどうすればよいですか?

答えの一部は、ソース リポジトリを非公開に設定することです(おそらく、クローン作成後にクローン リポジトリでこれを行う必要があります)。

# source_repo/.hg/hgrc

[phases]
publish = false

draftこれにより、トピックの一部である変更セットのフェーズが維持されますが、トピック名は複製されません。

MnWE

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
4

2 に答える 2

0

答えは

hg clone --stream a b

How can one access a hidden changeset from a Mercurial server?に対するこの回答で示唆されているように . ただし、これは非表示の変更セットをすべて取り込む可能性があるようです。私は、アクティブなトピックに必要な変更セットのみを保持することを好みます。また、あまり明白でも記憶に残るものでもありません。もっと良い方法があると思います。

于 2022-01-26T19:24:42.307 に答える