当前位置:  开发笔记 > 编程语言 > 正文

你如何在Git项目的文件中包含当前的提交ID?

如何解决《你如何在Git项目的文件中包含当前的提交ID?》经验,为你挑选了2个好方法。

我有一个开源静态JavaScript + HTML应用程序,它现在部署在三个不同的地方,一个在我的本地机器上,一个在内部服务器上,一个在稳定的外部服务器上.

我希望能够立即告诉哪个版本部署在哪个地方,并且我希望bug报告者可以轻松访问他们报告错误的版本.

理想情况下,作为提交过程的一部分,我希望使用提交的哈希值来编写文件.当然,根据我对Git的了解,这是不可能的,因为将计算的哈希作为提交中文件的一部分包含在内会改变该提交的计算哈希值.

另一方面,我可以将构建它作为构建过程的一部分.我目前没有构建过程,如果可能的话,我想避免添加一个步骤.

最干净的方法是什么?



1> Pat Notz..:

由于Git的本质,这有一些微妙之处.我这样做的方法是复制Git开发人员自己做的事情.首先,你会想要使用注释标签,无论如何这可能是一个好主意.要查看,您可以创建一个这样的新标记:

$ git tag -a -m "Version 0.2" v0.2 HEAD

然后(如Otto的帖子所示),您可以使用git describe一个有用的"版本"字符串,该字符串将包括自标记以来的提交数和当前提交的sha1的前导数字.以下是我的一个项目的示例:

$ git describe
v1.0-3-gee47184

也就是说,这个副本在"v1.0"标签之前是3次提交,而提交sha1以ee47184开头(我不确定为什么它们包括那个领先的'g').

Git开发人员更进一步,如果工作副本被修改(未提交),还包括一个额外的位.这需要更多的步骤,所以它们都被包含在他们命名的脚本中VERSION-GEN.运行时,它会将版本字符串打印到标准输出,并创建一个VERSION-FILE文件(如果版本没有更改,脚本会小心不要重新触摸该文件 - 所以它的构建工具友好).然后,您可以VERSION-FILE在源代码,帮助文件等中包含该文件.

使用我的示例VERSION-GEN脚本(下面),上面示例的我的版本字符串是:

$ VERSION-GEN
version: 1.0-3-gee47

如果我修改任何跟踪文件,它看起来像这样:

$ VERSION-GEN
version: 1.0-3-gee47-mod

这是我稍微调整过的版本VERSION-GEN.请注意,它期望标记版本的标签的格式为v [0-9]*(例如,v1.0或v0.2或v12.3.4或v12.2-4feb2009等)

#!/bin/sh

# Tag revisions like this:
# $ git tag -a -m "Version 0.2" v0.2 HEAD

VF=VERSION-FILE
DEFAULT_VERSION=UKNOWN

LF='
'

# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
if test -d .git -o -f .git &&
    VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
    case "$VN" in
    *$LF*) (exit 1) ;;
    v[0-9]*)
        git update-index -q --refresh
        test -z "$(git diff-index --name-only HEAD --)" ||
        VN="$VN-mod" ;;
    esac
then
        continue
    #VN=$(echo "$VN" | sed -e 's/-/./g');
else
    VN="$DEFAULT_VERSION"
fi

VN=$(expr "$VN" : v*'\(.*\)')

# Show the version to the user via stderr
echo >&2 "version: $VN"

# Parse the existing VERSION-FILE 
if test -r $VF
then
    VC=$(sed -e 's/^version: //' <$VF)
else
    VC=unset
fi

# If version has changed, update VERSION-FILE
test "$VN" = "$VC" || {
    echo "version: $VN" >$VF
    echo >&2 "($VF updated)"
}


`git describe --tags --long --abbrev = 7`,结果示例:`v2.3.5-151-gf4c1dab`

2> Otto..:

将其添加到自动部署系统.

如果您的部署不是自动化的,那么将其自动化并将其添加到那里.然后你删除了一个步骤.

使它更有用"这是从z存储库y时间部署在x日期".提交的哈希对非开发人员来说并不是很重要.


我要添加"git describe"输出.
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有