HC4*_*ica 15 version-control mercurial commit mercurial-queue
使用Mercurial队列扩展,我可以使用一些提交消息进行空提交,如下所示:
hg qnew patch_name -m "message"
Run Code Online (Sandbox Code Playgroud)
没有Mercurial队列有没有办法做到这一点?我试过简单地说:
hg commit -m "message"
Run Code Online (Sandbox Code Playgroud)
但是hg只是说"没有改变"并且没有做提交,我没有看到任何"强制"选项会覆盖它.
如果您想知道我这样做的动机:我们有测试基础设施,您可以将其推送到特殊存储库,它将触发自动测试运行.您需要在最尖端提交的提交消息中放入一个特殊字符串,该消息说明要运行哪些测试.显然,当我推送到实际的存储库时,我不希望这个字符串在那里.而不是修改提交两次(一次添加特殊字符串,第二次删除它),我会发现只添加一个空提交,然后回滚它更清洁 - 我可以用mq做到这一点,但是我想找到一种没有mq的方法.
Jos*_*isl 16
您可以使用hg commit --amend
创建空提交.
只需创建一个任意提交并撤消更改.然后将两个提交折叠在一起.
例:
touch tmp # create dummy file
hg add tmp # add file and...
hg commit -m "tmp" # ... commit
hg rm tmp # remove the file again and ...
hg commit --amend -m "empty commit" # ... commit
Run Code Online (Sandbox Code Playgroud)
2015 年,mercurial-devel 邮件列表的一个补丁建议在 commit 命令中添加一个选项,称为--allow-empty
(很像类似的 git option)。然而,我们决定采用配置选项。
它最终于 2015 年 7 月添加到 Mercurial 3.5 中,名称为ui.allowemptycommit
。不必在用户或存储库的配置文件中指定它,但是,--config
向单个命令添加一个开关就足够了,如下所示:
hg ci -m "empty commit" --config ui.allowemptycommit=1
Run Code Online (Sandbox Code Playgroud)
此外,在 2020 年,建议扩展hg rebase
命令考虑另一个实验性配置选项的价值。它被命名为rewrite.empty-successor
,并且可以设置为skip
(默认)或keep
。配置选项本身是在 2020 年 8 月随Mercurial 5.5引入的,尽管我不确定rebase
扩展何时开始考虑它。
它的工作原理似乎是rebase
读取新选项,然后根据是否配置为或来本地覆盖旧选项。结果是,较旧的 Mercurial 版本的扩展直接观察该选项(测试的版本 4.8.2),而较新版本的扩展则观察该选项(测试的版本 6.1)。较新的版本忽略配置的外部状态。ui.allowemptycommit
rewrite.empty-successor
skip
keep
rebase
ui.allowemptycommit=1
rewrite.empty-successor=keep
ui.allowemptycommit
因此,为了以hg rebase
某种方式可移植地保留空变更集,可以设置这两个选项以保留它们,如下例所示:
hg rebase --config rewrite.empty-successor=keep --config ui.allowemptycommit=1 ...
Run Code Online (Sandbox Code Playgroud)
hg convert
我对所有这些的用例是在存储库上使用svn
,然后使用空hg commit
作为初始提交(本地变更集编号 0)。然后我将使用hg rebase
第一个使即将成为的变更集 0 成为第一个导入的 svn 修订版的父级(因此它将成为本地变更集编号 1,与 svn 修订版号匹配),然后使用第二个来修复某个有问题的提交,该提交hg convert
不会无法正确解析。对我来说至关重要的是,hg rebase
命令应保留空提交,例如基于svn
仅更改目录的修订的提交。(Mercurial 永远不会单独跟踪目录,只会跟踪文件。)
您可以进行关闭分支的提交:
hg commit --close-branch -m "message"
Run Code Online (Sandbox Code Playgroud)
更新:
您可以关闭分支一次,但可以通过另一次提交重新打开它。在不更改文件的情况下重新打开分支的最简单方法是标记某些修订。因此,您可以用于hg commit --close-branch
空提交,然后hg tag
重新打开。
更新v2
实际上,您只需使用hg tag
命令即可创建新的空提交。它有-m
用于设置提交消息的参数。如果您并不真正关心此标签的正确性,您可以通过带hg tag
参数-f
调用来仅使用一个标签名称:
hg tag t1 -f -m "message"
Run Code Online (Sandbox Code Playgroud)
您现在可以通过执行以下操作来创建空提交hg ci -m "empty commit"
例如
hg branch my-next-branch
hg ci -m "empty commit"
Run Code Online (Sandbox Code Playgroud)
将创建一个my-next-branch
带有单个空提交的文件,您可以将其推送到远程存储库。