Git命令获取头部SHA1,并使用-肮脏的;工作区不干净时的后缀

Git命令获取头部SHA1,并使用-肮脏的;工作区不干净时的后缀,git,Git,我正在为构建过程添加版本号。对于在开发人员机器上构建的版本,我想知道工作区是否包含构建中可能包含的更改,并在SHA1后面加上-dirty 例如: c2bc0d223739c841c5e810c6c439562aa9d67f5f c2bc0d223739c841c5e810c6c439562aa9d67f5f-dirty 第一种形式可通过以下方式获得: git rev-parse HEAD 但是,当工作区变脏时,我无法确定如何附加-dirty后缀git descripe提供了这一点,但仅限于标

我正在为构建过程添加版本号。对于在开发人员机器上构建的版本,我想知道工作区是否包含构建中可能包含的更改,并在SHA1后面加上
-dirty

例如:

c2bc0d223739c841c5e810c6c439562aa9d67f5f
c2bc0d223739c841c5e810c6c439562aa9d67f5f-dirty
第一种形式可通过以下方式获得:

git rev-parse HEAD
但是,当工作区变脏时,我无法确定如何附加
-dirty
后缀
git descripe
提供了这一点,但仅限于标记名。我们并没有真正使用标签(最近一次是在400多个版本之前),它们也不像SHA1那样具有决定性

这可以在一个命令中完成,还是我需要执行一些bash脚本?

您可以使用
--match
和一些永远不会匹配的内容来强制描述不匹配任何标记。这有点粗俗,但它确实有效:

git describe --match=NeVeRmAtCh --always --abbrev=40 --dirty

这仍然是最好的方法吗?我自己似乎不需要
--match
(还有一个
--no match
选项)。什么情况下,
--match=…
起了作用?@AnthonySottile如果不包括
--match=NeVeRmAtCh
输出也将包含标记。您还可以将空字符串传递给
--match
选项:
--match=”“