我在Mercurial中使用了命名分支。
在这样做的过程中,我创建了一个名为playground的分支,在那里我可以尝试各种古怪的实验。我从不打算将这个分支合并到任何其他分支中,我从不想将它推送到我们的主存储库。
自创建它以来,每次我执行推送时都会被告知我添加了一个新分支,我必须使用--new-branch
标志。此时hg push -b default
(或我正在推动的任何分支)工作正常,但这很烦人。有没有办法通过让Hg知道我对推动那个分支不感兴趣来压制这个消息?
答案 0 :(得分:55)
从Mercurial 2。1(2012年2月发布)开始,您可以将变更集标记为 secret ,以防止它们被推送到另一个存储库。您使用新的hg phase
command执行此操作:
$ hg phase --force --secret .
这标记当前工作目录父修订版(.
)处于secret
阶段。秘密更改集是您的存储库的本地更改:它们不会被推或拉。推送现在看起来像这样:
$ hg push
pushing to /home/mg/tmp/repo
searching for changes
no changes to push but 2 secret changesets
旧版Mercurial中没有等效机制。您最好的选择是为您不想推送的变更集创建本地克隆。
答案 1 :(得分:6)
Mercurial 2.1引入了hg phase
命令,该命令允许用户控制与远程存储库交换的更改集。 @MartinGeisler answer to this question详细说明了此方法。
如果要创建代码的本地分支,可以选择几种方法。您可以hg clone
存储库,它将在您的文件系统中本地创建整个存储库的分支。另一种选择是您可以尝试使用像LocalbranchExtension这样的Mercurial扩展。
在不使用命名分支的情况下,有很多方法可以在Mercurial中进行分支。找到一个适合您需求的方法。
进一步阅读:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
答案 2 :(得分:3)
除了上述有关阶段的优秀答案外,您还可以指定' default-path' (在.hgrc的[paths]部分中)引用本地存储库:
[paths]
default = ...
default-push = .
这将导致所有传出的更改集与指定的存储库进行比较。在这种情况下,将本地存储库中的传出更改集与本地存储库进行比较会导致无法推送。
您仍然可以从主存储库中提取/更新/合并,但是没有推送会将任何内容发送回该主存储库。
如果您使用多台计算机/存储库,则可以按上述方法设置一台,并配置其他计算机/存储库以指定默认值。指向推送到自身的服务器的路径。通过这种方式,其他计算机可以推/拉到您的本地中央存储库,这些变更集永远不会逃脱您精心配置的存储库集合。