我如何为git主线中的每个提交模拟全局增加的修订版号?
所以,在我提交后,我希望运行的脚本在某处增加一个数字。
这将允许我轻松告诉我的客户,在git修订版XYZ中修复了X功能。
我正在寻找一个足够强大的实用示例脚本来处理推送和合并到一定程度。
答案 0 :(得分:27)
git describe
为您提供如下版本说明:v2.0-64-g835c907
。 v2.0
部分是提交之前的最新注释标记的名称,64
是之后的提交数,835c907
是缩写的提交ID。它基本上是以精确和方便(虽然技术)的方式识别任何修订。
注意:为此,您需要至少一个带注释的标签。要为版本v2.0运行创建一个 - git tag -a v2.0
,如果没有带注释的标签,则此命令将失败,除非给出诸如--tags
或--always
之类的回退参数。
答案 1 :(得分:9)
可以在git中模拟修订版号,但重要的是要知道它不是完美的匹配而不是最容易追溯到的。我个人用它为Web应用程序制作更简单的修订号,因为我是唯一的开发人员。我在我的.bashrc
中使用以下函数来获取版本号,然后我将其用于发行说明(但如果您还没有我强烈建议标记版本 - 那么该编号仅适用于用户)。如果这些限制是众所周知的,它会提供更加人性化的修订号。
function rgit() {
git rev-list --abbrev-commit HEAD | wc -l | awk '{print $1}'
}
答案 2 :(得分:6)
我认为你的版本号与版本号相混淆。
Subversion使用修订号,因为它可以:它是一个集中的存储库。 Git当然有SHA-1哈希值而不是版本号,因为它没有中央存储库(但你知道这一点)。
该版本号(以及散列在技术上是160位数,它只是不顺序)不应该真正引起客户的关注。他们应该关注的是发布号码。当你打包源代码并说“这是版本2.3.4”时,请填写发行说明以说明发生了什么变化。
理想情况下,此类列表由问题跟踪软件生成,您的源代码只需标记为说明哪个版本构成该版本号。
答案 3 :(得分:1)
我(不知道git describe
)一直在使用以下脚本:
#!/bin/bash
FULL_BRANCH=`git branch | grep '*'`
BRANCH_NAME=${FULL_BRANCH:2}
REV=`git rev-parse --short HEAD`
$COMMIT_NAME = $BRANCH_NAME-$REV
这将为您提供一个名称,其中包含当前分支名称,后跟短提交ID。例如:master-c03f862
。
完成你所追求的目标就足够了,但也许git describe
是正确的方式。