是否有一个Git命令来获取当前标记,分支和提交?

时间:2010-05-19 08:00:40

标签: git maven command-line mavanagaiata

我目前正在使用三个命令的集合来获取当前标记,分支以及最近提交的日期和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,可能会减少执行时间。

6 个答案:

答案 0 :(得分:52)

  1. 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”显示为上方。

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

    git describe
    

    写出最新的适用标记,自标记提交以来的提交数量以及SHA1:

      

    v3.3.0-46-g71a77dc

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

  4. 我认为使用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