测试mercurial中未提交的更改

Ant*_*ins 9 mercurial

如果mercurial的工作树中存在未提交的更改,那么检查脚本的最佳方法是什么?

(我git diff --quiet在git中的方式)

Ry4*_*ase 11

在mercurial 1.4及更高版本中,您可以使用summary命令,当存在更改时,它会提供如下输出:

$ hg summary
parent: 0:ad218537bdef tip
 commited
branch: default
commit: 1 modified
update: (current)
Run Code Online (Sandbox Code Playgroud)

这个后提交:

$ hg summary
parent: 1:ef93d692f646 tip
 sfsdf
branch: default
commit: (clean)
update: (current)
Run Code Online (Sandbox Code Playgroud)

或者,您可以安装提示扩展并执行以下操作:

$ hg prompt '{status}'
Run Code Online (Sandbox Code Playgroud)

这将输出一个!?有或全无适当.

当然,这两者都只是替代文本输出.我找不到任何直接使用退出代码的东西,但是因为$?检查你可以做的管道中的最后一个命令?

hg summary | grep -q 'commit: (clean)'
Run Code Online (Sandbox Code Playgroud)

这将设置$?如果未提交任何更改,则为非零:

$ hg summary | grep -q 'commit: (clean)' ; echo $?
0
$ echo more >> that 
$ hg summary | grep -q 'commit: (clean)' ; echo $?
1
Run Code Online (Sandbox Code Playgroud)

  • 您对字符串更改的担忧是有道理的,但如果不能在不同的语言环境中运行,我认为它不会成为问题.mercurial作者Matt Mackal考虑API的文本输出部分,如果有其他选项可用,则不允许更改它.你不会看到格式改变. (2认同)

whi*_*nge 5

您也可以运行hg id. 如果散列以 a 结尾,+则表示工作副本有更改。这甚至应该适用于旧版本的 hg。

听起来您已经在使用 zsh;好吧,几天前我帮助更新了 Mercurial 对内置VCS_INFO 的支持,以便将 VCS 信息放入您的提示中。下一个版本计划支持显示对工作目录的更改(除其他外)。如果您不想等待,可以从 CVS 获取必要的文件

目前我的提示包括这个(仅使用内置的 zsh 功能):

   (hg)[1801+ branchname somemq.patch, anycurrentbookmarks]
Run Code Online (Sandbox Code Playgroud)


vsv*_*sya 5

我用:

hg status -m -a -r -d -u
Run Code Online (Sandbox Code Playgroud)

如果跟踪的文件没有更改,则命令输出为空字符串。