如何从ant构建脚本中查找最新的git commit hash?
我目前正在开发一个新的开源项目,我存储在github上.我想扩展我现有的ANT构建文件,以允许我创建编号的构建.我想我会用"ant buildnum -Dnum = 12"之类的东西启动构建.
我希望生成的jar在它的清单文件中有两个关键信息:
我知道如何创建build.number行.但是,我不确定最好的ant管道来查找最新的git commit hash,这是我想填写的值.
我看到这个问题已经变得有点流行了.现在已经是我公认的Git使用年限了,从那以后我学到了很多东西.请,拜托之前,不管你会从这个Q&A得知事情对你的Git冒险阅读最后一段.
我想编写应用程序构建版本,该版本是从我所在的GIT分支名称(构建时)和自分支分歧后的提交数量自动派生的.我相信这对我的GIT存储库中的任何提交都是唯一的吗?分支名称是唯一的,并且提交沿着分支相互链接?如果我标记提交,我也可以使用该标记作为前缀.
在某种程度上git describe做我想要的,但它不包括我所在的分支名称,它包括缩写提交SHA-1哈希,我认为我不需要它,因为它不会添加任何东西到字符串的熵并且可能是多余的(我可能在这里错了,所以请纠正我).
我有什么选择?我在这里想的是正确的方向吗?当我有更多关于软件开发的重要事项时,我只是厌倦了为版本添加数字.
顺便说一下,我从来没有用肮脏的工作树建造.即我在构建公共发布之前总是将更改提交到存储库.
我现在知道 Git分支只是提交引用,因此,许多分支(和标记!)可能指向单个提交.因此,问题"这个提交属于哪个分支/谎言" 对Git 来说并不完全有效.Git 会跟踪你正在使用的"当前"分支 - 它已经为你检查过的分支 - 但同时任何数量的其他分支可能指向同一个提交,并且可以说没有任何一个分支可以被选择为"main"除非您想要表示当前已签出到磁盘的那个.请阅读本页面上的以下答案进行详细说明.
我们有一个git存储库,其中包含一些相关Java WAR和JAR的源代码.如果Java代码可能以某种方式:
System.err.println("I was built from git commit " + commitID);
Run Code Online (Sandbox Code Playgroud)
(显然,真正的代码可能会将其放入HTTP标头,在启动时记录它,或者其他什么,现在不重要)
我们正在使用Ant来构建(至少对于生产构建,似乎有些程序员在Eclipse内部进行测试,我知道的更少)二进制文件.
有没有一种规范的方法可以在构建时将当前git checkout的提交ID添加到我们的Java中?如果没有,使用Ant构建的人可以建议他们如何做,我们将看看是否出现了规范的解决方案?我确信我可以完全用整块布料来创造一些东西,但这似乎是一个可重复使用的构件,所以我宁愿不这样做.