1

背景:Mercurial 主题

Mercurial 有一个很好的功能调用topics作为evolve扩展的一部分。它们充当临时的轻量级本地分支,并且是Heptapod 工作流程不可或缺的一部分,例如确保与 Git(通过)的良好交互hg-git。它们是通过在您的~/.hgrc文件(或 per-repo in .hg/hgrc)中包含以下内容来启用的:

# ~/.hgrc
...

[extensions]
evolve =
topics =

由于这些是为本地工作而设计的,因此当您推送时,主题不会推送到服务器(而是通过Heptapod 工作流程成为 git 中的临时分支)。

问题

如何在本地克隆 repo 以获取克隆中的主题?

部分答案是将源存储库设置为非发布:(可能应该在克隆后的克隆存储库中执行此操作)。

# source_repo/.hg/hgrc

[phases]
publish = false

这会保留作为draft主题一部分的变更集的阶段,但不会克隆主题名称。

锰WE

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

正如对如何从 Mercurial 服务器访问隐藏的变更集的答案中所建议的那样?. 但是,这似乎可能会带来所有隐藏的变更集:我宁愿只拥有活动主题所需的那些。它也不是很明显或令人难忘。我怀疑有更好的方法。

于 2022-01-26T19:24:42.307 回答
0

考虑这是一种解决方法,也许,但它应该工作。

如果您只是在本地工作,则实际上不必clone. 您可以制作整个工作文件夹(包含该文件夹的.hg文件夹)的完整副本。

将其复制到您想要的任何位置,然后当您在该路径中运行 Mercurial 命令时,它的行为将与克隆时完全相同,只是它不会将您的原始版本视为默认发布存储库,而是与原始版本相同。.hgrc如果需要,您显然可以在文件中更改它。

根据您的需要,您可能需要hg up null事先清除所有本地工作文件,这将加快大型 repo 的复制速度。

于 2022-01-27T13:13:01.433 回答