我们有一个git存储库,其中包含一些相关Java WAR和JAR的源代码。如果Java代码可能以某种方式,那将是很好的:
System.err.println("I was built from git commit " + commitID);
(显然,真正的代码可能会将其放入HTTP标头,在启动时记录它,或者其他什么,现在不重要)
我们正在使用Ant来构建(至少对于生产版本,似乎有些程序员在Eclipse内部进行测试,我知道的更少)二进制文件。
有没有一种规范的方法可以在构建时将当前git checkout的提交ID存入我们的Java?如果没有,使用Ant构建的人可以建议他们如何做,我们将看看是否出现了规范的解决方案?我相信我可以完全用整块布料来创造一些东西,但这似乎是一个可重复使用的构件,所以我宁愿不这样做。
答案 0 :(得分:14)
您可以使用
获取最后一次提交SHAgit rev-parse HEAD
但使用
通常更有用git describe
会给你一些看起来像这样的东西:
v0.7.0-185-g83e38c7
如果您有标签,这将有效 - 它会告诉您当前结账时最后一个有效标签的提交数量加上该提交的部分SHA,因此您可以使用它来支持以后的结账。在大多数情况下,您可以像使用SHA一样使用此标识符,但它更具人性化。
答案 1 :(得分:7)
我不知道git是否有任何Ant任务(我google了一下没有成功),无论如何Ant可以使用Piotr的选项(git rev-parse HEAD
)更新属性文件,然后在运行时使用该属性获取修订号。这比使用Ant生成.java文件更干净且 IDE友好。
答案 2 :(得分:3)
我写了一个Ant任务来使用JGit API获取buildnumber(没有git命令行应用程序),请参阅jgit-buildnumber-ant-task。然后,您可以将此buildnumber存储在MANIFEST.MF文件中,并在运行时从类路径中获取它。
答案 3 :(得分:2)
git rev-parse HEAD
将打印您可能想要的内容(例如HEAD
提交的ID)。
您可以让ant生成一个简单的Java类,并将此id作为静态常量。
答案 4 :(得分:2)
首先,您可以将ident
gitattribute与$Id$
关键字一起使用(虽然它可能不是您想要的;它是文件内容的哈希值,与当前项目无关版本)。
其次,你可以像Linux内核和Git本身那样做:在Makefile中(在你的情况下:在Ant文件中)有一些规则取代了一些占位符,通常是'@@ VERSION @@'(但万一Perl是{++ VERSION ++')的结果是GIT-VERSION-GEN,后者又使用“git describe”。但为了有用,你必须标记你的版本(使用带注释/签名的标签)。
答案 5 :(得分:2)
如果对其他人有帮助。我知道你是ANT
对于 MAVEN 版本,您可以在 pom.xml 中使用 git-commit-id-plugin >文件
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.0</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
</configuration>
</plugin>
请通过:
1. http://www.baeldung.com/spring-git-information&
2. https://github.com/ktoso/maven-git-commit-id-plugin了解更多信息。