gpt4 book ai didi

git - 您将如何在 Git 项目的文件中包含当前提交 ID?

转载 作者:IT王子 更新时间:2023-10-29 01:26:52 28 4
gpt4 key购买 nike

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

我希望能够立即知道哪个版本部署在哪个位置,并且我希望错误报告者能够轻松访问他们报告错误的版本。

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

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

最干净的方法是什么?

最佳答案

由于 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 - 您将如何在 Git 项目的文件中包含当前提交 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514188/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com