Java 程序如何知道自己的gitsha?

Java 程序如何知道自己的gitsha?,java,git,Java,Git,我知道可能没有解决方案,但我们正在构建一个系统,进行一些数据处理,并在日志中存储用于生成数据的程序版本。我们正在使用Java,以防万一。程序版本只不过是gitsha。使用SHA,我们可以跟踪用于生成数据的构建/提交。我们的程序如何确定其git SHA?有可能吗?欣赏你的想法 一种可能的想法是使用一个脚本,在提交代码时,从提交消息中提取gitsha,然后将其写入资源文件。git显然不会跟踪该文件(即,需要将该文件添加到.gitignore)。在运行时,程序将从该文件中读取SHA。还有更好的选择吗

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

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

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


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

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


回购协议中SHA的Bash变量:

$(git rev-parse HEAD)

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

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-at-git-pre-commit钩子,它将自动生成发行说明,并且很容易知道不同版本中运行的是什么功能。

为什么不在编译时存储SHA,作为后期构建步骤?在签入更改时,您实际上并不需要它,只是在运行时,对吗?太好了。谢谢