代码之家  ›  专栏  ›  技术社区  ›  Koraktor

有没有一个git命令来获取当前的标记、分支和提交?

  •  43
  • Koraktor  · 技术社区  · 14 年前

    我目前正在使用三个命令的集合来获取最新提交的当前标记、分支、日期和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 回复  |  直到 8 年前
        1
  •  53
  •   Andrew Marshall    12 年前
    1. git log 非常灵活,有很多选择。您可能无法复制上面三个命令的确切输出,但您可能已经接近到可以达到所需的效果。

      例如:

      git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1
      

      生成最新(head)提交的日期、sha-1和符号引用(包括标记):

      2010-05-20 45BD5E7(头部、原点/主)

      之后,大概, sed 和/或 awk 或者Maven本地方法可以进行微调/抛光。注意,一个特定的标记与一个特定的提交相关联,所以如果在头之前有三个提交被标记为“v1.0.0”,那么您将不会看到“v1.0.0”出现在上面。

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

      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`"
      

      它产生一些适合附加到程序路径末端的内容:

      主控C528 2FF

      一种更为扩展的描述,适用于包括作为注释或打印标识符:

      BUILDDESC="$(git symbolic-ref HEAD 2> /dev/null | cut -b 12-)-$(git log --pretty=format:'%h, %ad' -1)"
      

      产生类似于:

      Master-C5282FF,2010年3月12日星期五22:19:51-0600

    我想和他一起玩 GIT日志 ,可能与文本处理工具/方法结合使用将得到您想要的。

        2
  •  10
  •   Peter Farmer    8 年前

    我不使用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在您的路径中,您现在可以调用“git-tbc”。这就是你要找的吗?

        3
  •  6
  •   Koraktor    13 年前

    我为这个目的创建了一个Maven插件,它非常适合我的需要(事实上它现在已经超过了它们)。

    它叫 Mavanagaiata ,它是开源的,可以从Maven Central获得。

        4
  •  4
  •   albfan    13 年前

    我对这类事情的“回购”总是 巴希完成 . 好吧,“标签标签”是bash成为高效工具的方式,那么,所有神奇的东西都是从哪里来的呢?

    有一个 /etc/bash_完成.d/ 留下bash完成扩展的目录。必须有一个git文件可执行文件,打开它并寻找类似get_refs()的文件。如果你给它一张支票,你会发现 GIT描述 每个参考的Git 是你的朋友,让我们来举几个例子:

    共同回购:

    $ 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
    

    检查 “人页” 对于这个命令,里面有更多的东西!.

        5
  •  3
  •   edrabc    12 年前

    我找到了这个Maven插件: https://github.com/alx3apps/jgit-buildnumber ,看起来不错 替换 属于 BuildNumber Maven插件 对于 GIT项目 . 此外,它可以从Maven中央存储库中获得。

    它在 Maven 3 . 对于Maven2多模块项目,只需在父POM的属性部分添加以下行:

    <session.executionRootDirectory>${basedir}</session.executionRootDirectory>
    
        6
  •  1
  •   webmat    10 年前

    这将显示head的提交ID,以及恰好位于head的任何分支或任何标记。

    git reflog --decorate -1
    

    样品输出:

    484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD