我目前正在使用三个命令的集合来获取当前标记,分支以及最近提交的日期和SHA1。
git describe --always --tag
git log -1 --format="%H%n%aD"
git rev-parse --abbrev-ref HEAD
将输出如下内容:
1.2.3-5-gdeadbeef
deadbeef3b8d90071c24f51ac8f26ce97a72727b
Wed, 19 May 2010 09:12:34 +0200
master
说实话,我对此完全没问题。但是我正在使用Maven的这些命令以及之前使用过Maven的任何人,知道外部命令会让POM膨胀多少。我只想减少我的pom.xml,可能会减少执行时间。
答案 0 :(得分:52)
git log
非常灵活,有很多很多选项。您可能无法重现上述三个命令的确切输出,但您可能已足够接近以达到所需的效果。
例如:
git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1
生成最新(HEAD)提交的日期,SHA-1和符号引用(包括标记):
2010-05-20 45bd5e7(HEAD,origin / master)
之后,据推测,sed
和/或awk
或Maven本地方法可以进行微调/抛光。请注意,特定标记与特定提交相关联,因此如果它是HEAD之前的三个提交,例如标记为“v1.0.0”,则您不会看到“v1.0.0”显示为上方。
提供提交的succint描述的更简单的单个命令是:
git describe
写出最新的适用标记,自标记提交以来的提交数量以及SHA1:
v3.3.0-46-g71a77dc
我对Maven一点也不熟悉,并且不知道运行外部进程有多么容易/困难,所以不确定以下是否有任何帮助,但我想我可能会提到它以防万一。
为了您在autoconf / automake框架中描述的确切目的,即标记构建,我实际上使用了类似的东西:
BUILDTAG="`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`"
产生适合在程序路径末尾添加的东西:
主c5282ff
更广泛的描述,适合包含注释或打印标识符:
BUILDDESC="$(git symbolic-ref HEAD 2> /dev/null | cut -b 12-)-$(git log --pretty=format:'%h, %ad' -1)"
产生类似的东西:
master-c5282ff,Fri Mar 12 22:19:51 2010 -0600
我认为使用git log
,可能与文本处理工具/方法一起使用可以获得你想要的效果。
答案 1 :(得分:10)
我不使用Maven,所以我不知道你是如何调用这些命令的,但是向git添加自定义命令是相当简单的。
创建一个名为git-tbc的脚本,如下所示:
#!/bin/bash
git describe --always --tag
git log -1 --format="%H%n%aD"
git rev-parse --abbrev-ref HEAD
确保git-tbc在你的PATH中,你现在可以调用“git tbc”。这是你在找什么?
答案 2 :(得分:6)
我为这个目的创建了一个Maven插件,它真正符合我的需求(事实上它现在超过了它们)。
它叫做Mavanagaiata,它是开源的,可以从Maven Central获得。
答案 3 :(得分:4)
我这样的“回购”总是 bash_completion 。好的,“tab tab”是bash成为一种高效工具的方式,那么,所有神奇的东西都来自哪里?
有一个 /etc/bash_completion.d / 目录,其中保留了bash完成的扩展名。必须有一个git文件可执行文件,打开它并寻找类似get_refs()的东西。如果你给它一个支票,你会发现 git describe 和 git for-each-ref 是你的朋友,让我们尝试一些例子:
一个共同的回购:
$ cd /your/git/repo; git branch -a
master
blaster
* brunch
lunch
remotes/origin/master
remotes/origin/develop
remotes/github/master
哪个是我检查的分支?
$ git describe --contains --all HEAD
brunch
我的遥控器是什么?
$ git remote
origin
github
遥控器上的分支是什么?
$ git for-each-ref --format="%(refname:short)" refs/remotes
origin/master
origin/develop
github/master
我当地的分支机构是什么?
$ git branch
master
blaster
* brunch
lunch
...更可解析的分支输出?
$ git for-each-ref --format="%(refname:short)" refs/heads
master
blaster
brunch
lunch
标签怎么样?
$ git for-each-ref --format="%(refname:short)" refs/heads refs/remotes refs/tags
master
blaster
brunch
lunch
origin/master
origin/develop
github/master
release-0_1
release-0_2
release-1_0
检查“手册页”以获取此命令,内部还有更多内容!
答案 4 :(得分:3)
我找到了这个Maven插件:https://github.com/alx3apps/jgit-buildnumber,对于 git项目来说,它似乎是替换 buildnumber-maven-plugin 。此外,它可以从Maven Central Repositories获得。
在 Maven 3 中效果很好。对于Maven 2多模块项目,只需在父pom的属性部分添加以下行:
<session.executionRootDirectory>${basedir}</session.executionRootDirectory>
答案 5 :(得分:1)
这将显示HEAD的提交ID,以及恰好恰好位于HEAD的任何分支或任何标记。
git reflog --decorate -1
示例输出:
484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD