有没有一个单一的Git命令来获取当前的标签,分支和提交?
我目前正在使用三个命令的集合来获取最近提交的当前标记,分支和date以及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的任何人,都知道外部命令有多less东西使POM膨胀。 我只是想缩小我的pom.xml,可能会缩短执行时间。
-
git log
非常灵活,有很多选项。 您可能无法重现上述三个命令的确切输出,但您可能已经足够接近以达到所需的效果。例如:
git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1
产生最新(HEAD)提交的date,SHA-1和符号引用(包括标签):
2010-05-20 45bd5e7(HEAD,origin / master)
之后,大概
sed
和/或awk
或Maven原生的方法可以进行微调/抛光。 请注意,特定的标签与特定的提交相关联,所以如果在HEAD之前的三次提交被标记为“v1.0.0”,则不会看到“v1.0.0”出现以上。 -
一个简单的单一命令提供一个提交的简单描述是:
git describe
其中写出最新的适用标签,自从标签提交以来提交的数量,以及SHA1:
v3.3.0-46-g71a77dc
-
我对Maven一点都不熟悉,也不知道运行外部stream程有多么简单/困难,所以我不确定是否有以下任何一个方面的帮助,但我想我可能会提到它以防万一。
为了确切的目的,你在autoconf / automake框架中描述了标签构build,我实际上使用了如下的东西:
BUILDTAG="`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`"
这会产生一些适合程序path结尾的内容:
主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
,可能会与文本处理工具/方法结合起来,你会得到你想要的。
我不使用Maven,所以我不知道你是如何调用这些命令,但添加自定义命令git是相当微不足道的。
创build一个名为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”。 这是你在找什么?
我为这个目的创build了一个Maven插件,这真的符合我的需求(事实上它现在超过了他们)。
它被称为Mavanagaiata ,它是开源的,可以从Maven Central获得。
我的“回购”这样的事情总是bash_completion 。 好的,“选项卡选项卡”是bash成为一种有效工具的方式,那么,所有这些魔法的东西都来自哪里呢?
有一个/etc/bash_completion.d/目录,其中扩展名为bash完成。 必须有一个git文件可执行文件,打开它并寻找类似于get_refs()的东西。 如果你给它一个支票,你会发现git描述和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
…更可parsing的分支输出?
$ 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
检查这个命令的“手册页” ,里面还有更多!
我find了这个Maven插件: https : //github.com/alx3apps/jgit-buildnumber ,这似乎是一个很好的代替 git项目 buildnumber-maven插件 。 此外,它可以从Maven中央存储库中获得。
它在Maven 3中很好地工作。 对于Maven 2多模块项目,只需在父pom的属性部分添加以下行:
<session.executionRootDirectory>${basedir}</session.executionRootDirectory>
这将显示HEAD的提交ID,以及任何分支或任何也恰好在HEAD处的标签。
git reflog --decorate -1
示例输出:
484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD