2010-05-19 34 views
43

我目前使用三個命令的集合,以獲得當前標籤,分支和最近的日期和SHA1提交。是否有一個單一的Git命令來獲取當前標籤,分支和提交?

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,可能會縮短執行時間。

+1

爲什麼你使用Maven的內部或POM這樣的事情? – khmarbaise 2010-05-19 08:04:39

+4

生成關於構建的軟件包的信息。這是將諸如JAR之類的二進制包「鏈接」到其在Git存儲庫中的相應狀態的最簡單方式。 – Koraktor 2010-05-19 08:20:28

回答

6

我爲這個目的創建了一個Maven插件,這真的符合我的需求(事實上它現在超過了他們)。

它被稱爲Mavanagaiata,它是開源的,可從Maven Central獲得。

10

我不使用Maven,所以我不知道你是怎麼調用這些命令,但添加自定義命令Git是相當微不足道。

創建一個名爲的git-TBC腳本,看起來像這樣:

#!/bin/bash 

git describe --always --tag 
git log -1 --format="%H%n%aD" 
git rev-parse --abbrev-ref HEAD 

確保混帳TBC在您的路徑,你可以現在稱之爲 「混帳TBC」。這是你在找什麼?

+0

這絕對是解決我的問題的好方法。沒有考慮創建自定義Git命令。但是我會對一個內置的Git命令更感興趣。我不想將自定義Git命令分發給其他開發人員。 :X – Koraktor 2010-05-19 08:22:00

+1

公平的評論,你可以在git倉庫中包含這個命令,並讓git爲你做這項工作,但是dev的再次需要修改他們的PATH。 – 2010-05-19 08:42:24

+0

我想避免的另一件事。在包含我的倉庫中的bash腳本中的任意命令之前,我寧願保留這些命令的多個執行。只是一個偏好問題。不過謝謝。 – Koraktor 2010-05-19 08:59:59

53
  1. git log非常靈活,有很多很多的選擇。您可能無法重現上述三個命令的確切輸出,但您可能已經足夠接近以達到所需的效果。

    例如:

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

    產生日期,SHA-1和最新(HEAD)的符號引用(包括標籤)提交:

    2010-05-20 45bd5e7(HEAD ,產地/主)

    之後,據推測,sed和/或awk或也許Maven的本機方法可以執行微調/城邦興。需要注意的是一個特定標籤與特定相關的承諾,因此,如果它是三個提交之前,這是標記,例如「V1.0.0」 HEAD,你不會看到「V1.0.0」,它顯示了與以上。

  2. 一個更簡單的單個命令,以提供一個提交一個succint描述是:

    git describe 
    

    其寫出最新適用標籤,提交的數目,因爲標記的提交,和SHA1:

    v3.3.0-46-g71a77dc

  3. 我一點都不熟悉Maven的,和不知道如何輕鬆/ DIFF icult是運行外部程序,所以我不能確定是否有任何以任何方式下面的幫助,但我想我可能會提到它,以防萬一。

    對於您所描述的確切目的,即標記建立,在一個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)" 
    

    產生類似:

    主c5282ff,週五3月12日22時19分51秒2010 -0600

我覺得跟git log打轉轉,可能與文本處理工具配合/方法會得到你想要的。

+0

在開始使用'sed'或'awk'之類的東西來獲得我想要的東西(!)之前,我很可能會使用我的三個單獨的命令。不管怎麼說,還是要謝謝你。 – Koraktor 2010-05-20 10:46:46

+0

小調:#3產生輸出'master-「c5282ff」' – msanford 2015-04-10 16:51:19

4

對於像這樣的東西我的「回購」總是bash_completion。好的,「選項卡選項卡」是bash成爲一種有效工具的方式,因此,所有這些魔術都來自哪裏?

有一個/etc/bash_completion.d/目錄,其中保留了bash完成的擴展名。必須有一個git文件可執行文件,打開它並尋找get_refs()之類的東西。如果你給它一張支票,你會發現,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 

檢查「手冊頁」這個命令,裏面有更多!

+0

我不知道爲什麼這是upvoted;它根本不回答這個(非常明顯的)問題:即獲得「最近提交的當前標籤,分支,日期和SHA1」。有用與否,它不回答這個問題。 – michael 2013-02-10 10:35:47

+0

他自己的回答似乎夠有效了,那麼爲什麼還要打擾另一個bash腳本?很多人都可以通過這個問題獲得關於他自己的回購的任何參考資料。我想這就是讓它升級的原因。我的回答是在問題一年多後上傳,並提供了很多好的答案。 – albfan 2013-02-20 01:25:56

+0

但是,你的回答也需要一個bash腳本來粘合各個部分,不是嗎?當然,你已經發布了一些有趣的git-fu片段(另外,收穫bash完成的提示也是一個好主意。)但唯一的問題是我們來到這個問題,特別是尋找最近提交的「標記+分支+日期+ SHA1「(即問題的答案)。不僅僅是「分支」或「標籤」(這就是你已經展示的):每個人都很容易搜索到;但組合(在一個命令中)不是。但我們必須通讀「你們都可能會覺得有趣的東西」才能找到答案。 – michael 2013-02-21 03:40:14

3

我發現這個Maven插件:https://github.com/alx3apps/jgit-buildnumber,這似乎是一個不錯更換buildnumber - Maven的插件混帳項目。此外,它可以從Maven Central Repositories獲得。

它很好地在Maven 3。對Maven 2多模塊項目,只需在你的父POM的屬性部分下面一行:

<session.executionRootDirectory>${basedir}</session.executionRootDirectory> 
1

這顯示HEAD的提交ID,以及任何分支機構或也恰巧是任何標籤正好在HEAD處。

git reflog --decorate -1 

輸出示例:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) [email protected]{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD 
相關問題