有人使用mercurial来管理linux内核吗?这有点长,但我不确定是否有答案。我想提供一些帮助的例子
这就是我所看到的:
在linux内核中,有一个命令在构建名为scripts / setlocalversion时使用。在此脚本中,它根据存储库信息设置内核版本。目前,它了解git,mercurial和svn repo。
对于git,它使用以下代码创建标记:
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore it,
# because this version is defined in the top level Makefile.
if [ -z "`git describe --exact-match 2>/dev/null`" ]; then
# If we are past a tagged commit (like "v2.6.30-rc5-302-g72357d5"),
# we pretty print it.
if atag="`git describe 2>/dev/null`"; then
echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
.....
所以,这是我做的一个例子来理解它是如何工作的:
[1536][mcrowe:test]$ git tag -a -m"Creating a tag" KernelTest
[1537][mcrowe:test]$ git rev-parse --verify --short HEAD
d024e76
[1537][mcrowe:test]$ git describe --exact-match
KernelTest
[1537][mcrowe:test]$ git describe
KernelTest
因此,在此示例中,内核构建时本地版本将设置为“KernelTest”。
然而,在mercurial中,获取本地版本的代码是:
if hgid=`hg id 2>/dev/null`; then
tag=`printf '%s' "$hgid" | cut -d' ' -f2`
# Do we have an untagged version?
if [ -z "$tag" -o "$tag" = tip ]; then
id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
printf '%s%s' -hg "$id"
fi
....
我的期望是我可以标记一个版本,并将该标记作为此脚本使用的内容,就像在git中一样。但是,似乎“hg id”从未打印出像此脚本所期望的标记:
[1546][mcrowe:test2]$ hg tag -m"Creating a tag" KernelTest -r tip
[1548][mcrowe:test2]$ hg id
3ccda5e738ae+ tip
[1548][mcrowe:test2]$ hg tags
tip 115:3ccda5e738ae
KernelTest 114:be25df80ce76
因此标记操作会更改修订版本,因此hg id将永远不会显示标记的内容。
核心问题 :AFAIK,这对Linux内核无效。问题是如何在内核树中实现这一点以允许hg tag
执行git tag
?
答案 0 :(得分:3)
尝试做:
hg log -r . --template '{latesttag}'
我认为这就是你想要的。
还有{latesttagdistance}
可以让你知道你是N提交过一个方便版本字符串的标签。