程序如何知道自己的git SHA?

时间:2017-03-28 17:33:13

标签: java git

我知道可能没有这方面的解决方案,但我们正在构建一个进行一些数据处理的系统,并且在日志中我们要存储用于生成数据的程序版本。我们正在使用Java以防万一。程序版本只不过是git SHA。使用SHA,我们可以跟踪用于生成数据的构建/提交。我们的程序如何确定它的git SHA?它甚至可能吗?欣赏你的想法。

一种可能的想法是拥有一个脚本,在提交代码时,从提交消息中提取git SHA,然后将其写入资源文件。这个文件显然不会被git跟踪(即文件需要添加到.gitignore)。在运行时,程序将从该文件中读取SHA。有更好的选择吗?

我们真正想避免的一件事是开发人员通过直接运行git commit而不是运行脚本而意外提交代码。如果发生这种情况,资源文件中的SHA将不会更新,这将引入严重的错误。如何处理?

另一个问题是,当我们执行git commit -m "commit message"时,git不会吐出完整的SHA,而是截断它。我们如何让git打印出完整的SHA?

3 个答案:

答案 0 :(得分:1)

您可以将Git SHA存储为打包过程的一部分。显然,实现取决于您的构建系统,但通常,您可以将SHA写入属性文件并在运行时加载它。

答案 1 :(得分:0)

回购中SHA的Bash变量:

$(git rev-parse HEAD)

您可以在构建中使用它。如果您使用Jenkins之类的东西来构建,那么还有其他问题需要解答。

答案 2 :(得分:0)

Git SHA没有被截断。截断意味着将其切断。

SHA只是非人类可读格式的64位hascode密钥。

什么是sha?

  

sha是一个哈希文件的简单程序。它使用国民   标准与技术研究所的安全哈希算法。它可以   使用SHA-1,SHA-256,SHA-384或SHA-512,分别生成,   哈希值为160,256,384或512位。 sha可以在脚本中使用   例如,进行文件完整性检查。 C的实现   算法在其他项目中也可能有用。

有几种技术可以提取软件版本,通常我们如何使用它是使用git标签和后缀Major,Minor和Patch在git pre commit hooks,它会自动生成发行说明并且很容易知道正在运行的是什么功能在不同的版本中。