在Mercurial中,是否有一种方法可以保存/提交未完成的更改,但通过clone / pull / push无法为其他人提供?

时间:2012-06-11 13:35:27

标签: mercurial

我经常发现自己需要在我正在进行的工作之前切换到不同的工作。我想知道在Mercurial中是否有一种方法可以保存/提交我未完成的更改,这对其他人来说是不可用的(即不可克隆/可推送/可拉动)。

3 个答案:

答案 0 :(得分:4)

Mercurial phases可能就是答案。

从Mercurial v2.1开始,您可以将mq个变更集配置为自动标记为secret。传入/拉出和传出/推送命令忽略secret个变更集。

要启用此行为,您需要将以下内容添加到配置中:

[mq]
secret = True

启用后,其行为如下:

$ hg qpush --all
applying my-patch
now at: my-patch

$ hg phase -r .
16873: secret

$ hg outgoing
comparing with https://www.mercurial-scm.org/repo/hg
searching for changes
no changes found (ignored 1 secret changesets)

答案 1 :(得分:2)

看看Shelve Extension。这为您提供了基础知识,可能足以满足您的需求。

还有Mercurial Queues Extension,但我发现这可能有点奇怪。

作为最后的替代方案,您可以随时将更改提交到另一个分支,以便它们不会影响主线开发,但我认为这些可能仍然可见。

答案 2 :(得分:1)

您可以将您的仓库克隆到新地点以处理新的更改。这样,您的挂起更改将保留在本地计算机上,而不会被推送。当然,这取决于您的回购的大小。如果它太大,克隆就会变得有点过分。

正如其他人所建议的那样,您可以将不可用的更改标记为在专用分支上。推送时,可以使用-b参数推送显式分支。因此,如果您的私人分支是TimPrivateBranch,其他更改都在default上:

 hg push -b default

TimPrivateBranch保留在您的本地计算机上。当然,这需要你每次推动都记住-b参数。

完成私有分支后,只需合并回默认值:

hg up default
hg merge TimPrivateBranch