有没有一个单一的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