有没有一个单一的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,可能会缩短执行时间。

  1. 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”出现以上。

  2. 一个简单的单一命令提供一个提交的简单描述是:

     git describe 

    其中写出最新的适用标签,自从标签提交以来提交的数量,以及SHA1:

    v3.3.0-46-g71a77dc

  3. 我对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