我目前正在为Mercurial中维护的东西添加包装.目前,该版本在Makefile中定义.我想改变它,以便我可以构建每日包或正确版本化的包.
Git提供了一个使用"describe"函数,可以为您提供最接近标记的构建和当前版本的描述.例如,如果我在内核中运行它:
git describe HEAD
Run Code Online (Sandbox Code Playgroud)
GIT返回:
v3.0-rc7-68-g51414d4
Run Code Online (Sandbox Code Playgroud)
告诉我修改晚于v3.0-rc7,git委托为51414d4
我可以在Mercurial做类似的事吗?
ckr*_*use 12
也许是这样的?
hg log -r . --template '{latesttag}-{latesttagdistance}-{node|short}\n'
Run Code Online (Sandbox Code Playgroud)
当然你应该用AliasExtension为它做一个别名.
但请注意,与"git describe"不同,此命令将始终显示"latesttagdistance"和"node | short"部分,而不是在latesttagdistance为0时省略它们.
这是一个接近的模拟git describe:
hg log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}"
Run Code Online (Sandbox Code Playgroud)
该{sub(...)}函数确保完全在标签处的工作副本v0.1.0将显示为v0.1.0和不显示v0.1.0-0-m123456789abc.
需要注意的是,m之前的哈希是米 ercurial,类似的方式git describe使用g用于摹吧.
为方便起见,请通过在以下内容中添加以下内容来创建别名~/.hgrc:
[alias]
describe = log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}"
Run Code Online (Sandbox Code Playgroud)
然后只需键入即可使用别名hg describe.
如果你想模仿git describe --dirty,事情会变得更加混乱 - 但你仍然可以用hg别名隐藏它们:
[alias]
describe = !
dirtymark=;
case " $1 " in " --dirty ") dirtymark=-dirty; ;; esac;
echo $($HG log -r . --template "{latesttag}-{latesttagdistance}-m")$($HG id -i) |
sed -r -e "s/\+\$/${dirtymark}/" -e 's/-0-m[[:xdigit:]]+//'
Run Code Online (Sandbox Code Playgroud)
现在运行hg describe --dirty将产生如下字符串:
v0.1.0v0.1.0-dirtyv0.1.0-1-mf6caaa650816v0.1.0-1-mf6caaa650816-dirty省略--dirty选项意味着-dirty即使工作副本包含未提交的更改,您也永远不会得到类似(2)和(4)的后缀.
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |