你可以关闭Mercurial分支而不先更新吗?

gbm*_*ter 27 mercurial branch

我知道您可以通过以下方式关闭Mercurial分支:

hg update rev-number
hg commit --close-branch -m "Closing branch."
Run Code Online (Sandbox Code Playgroud)

但是,我使用的一些存储库相当大,并且在发现多年前我想要关闭的松散分支之后,首先更新它可能需要几分钟(如果不是几小时),只做一次提交然后更新回到我原来的修订版(更多分钟,如果不是几小时).

所以我的问题是,有没有办法关闭Mercurial分支而不首先将工作目录更新到分支修订版?

Vin*_*nce 43

是的,你可以,但这在任何地方都没有记录.我已经使用了这种技术很长时间了,不用担心,它是安全的.

您可以发出以下命令,而不是更新

hg debugsetparent <revision>
hg branch <branchOfRevision>
Run Code Online (Sandbox Code Playgroud)

请注意,订单很重要.这将使您的repo认为它在新版本上,而您的所有文件都来自最初的版本.之后,您可以使用--close-branch提交,但使用该-X *选项进行空提交.

hg commit --close-branch -X * -m "Closing branch."
Run Code Online (Sandbox Code Playgroud)

现在,只需回到你以前的脑袋,就像什么都没发生一样.

hg debugsetparent <InitialRevision>
hg branch <branchOfInitialRevision>
Run Code Online (Sandbox Code Playgroud)

最后,如果您有子repos,您可能希望.hgsub在提交之前临时重命名该文件--close-branch,然后重命名.

  • 聪明!作为Mercurial开发者,这种技术对我来说是正确的. (6认同)

Obe*_*nne 7

Mercurial 4.8及更高版本附带核心扩展封闭头,它提供此功能:

hg close-head <revision>
Run Code Online (Sandbox Code Playgroud)

从帮助中:

这等效于在干净的树中签出每个修订并运行“ hg commit --close-branch”,不同之处在于它不会更改工作目录。

目前,您需要在您的中显式启用此扩展[HGRC][]

[extensions]
closehead =
Run Code Online (Sandbox Code Playgroud)