2013-07-01 66 views
28

我正在寫一個shell腳本,我正在查看最新版本的回購。具體而言,我想將這個過程分解成多個步驟。Git結帳最新標籤

  1. 我要最新的標籤保存庫到一個變量
  2. 打印出來Checking out version: XX
  3. Google Checkout的最新標籤

我見過similar questions,但我不明白如何保存將標籤的名稱放入一個變量中(可能是因爲我是帶shell腳本的noob)。

+0

[如何獲取Git中當前分支的最新標籤名稱?](http://stackoverflow.com/questions/1404796/how-to-get-the-latest-tag-name-in-電流分支在-GIT)。只有重複,因爲你明確要求'我想將最新的標籤保存到變量中',其餘的只是Bash。 –

回答

13

git describe --tags應該給你提供信息。

的bash/shell腳本:

#!/bin/bash 
... 
latesttag=$(git describe --tags) 
echo checking out ${latesttag} 
git checkout ${latesttag} 
+1

但是,如何將第1步保存到變量中?我知道如何將它打印到屏幕上。 – BFTrick

+1

使用'var = $(命令)' – exussum

+0

這工作!謝謝! :) – BFTrick

2

爲了將信息放入一個變量,你爲它分配:

myvar=myvalue 

但是,你要計算的價值分配,你不只是給變量分配一個常量。在你的情況下,你想把一個命令的輸出分配給變量。

首先,你必須弄清楚如何得到最後的標籤名稱。我會把它留給你,因爲你沒有談到如何創建標籤名稱。

然後,一旦你有一個給出最後一個標記名的命令,你需要將該名稱分配給一個變量。 Bash通過「命令替換」來做到這一點。

例如:thetagname=$(command_to_get_tag_name)

所以,如果你只取最後一個標籤,像這樣的git報道:

git tag | tail -1 

,那麼你可以把它分配給一個變量是這樣的:

thetagname=$(git tag | tail -1) 

你可以使用/看到這樣的值:

echo $thetagname 

或user1281385說,像這樣的:

echo ${thetagname} 

這兩種方法是相同的,不同之處在於第二個方法可以讓你的文字文本與變量值組合:

echo ${thetagname}ing 

這將追加「ing」到$ thetagname的內容。大括號是必要的,以防止bash認爲「thetagnameing」是變量。

bash手冊頁有一個名爲EXPANSION的部分,其中解釋了7種擴展。命令替換就是其中之一。 bash手冊頁相當大,並且確實重複了所有有趣的關鍵字,因此搜索其中的內容真的很煩人。下面是關於如何找到擴張部(和有點了解的傳呼機「少」)的一些提示:

開始手動讀者閱讀bash的手冊頁是這樣的:

man bash 

搜索在顯示屏中輸入/^EXPANSION進入閱讀器後,在行首選擇「EXPANSION」一詞。一旦您輸入/,您將在屏幕底部看到一個/,但手冊頁仍然存在。這是搜索模式的命令。然後你輸入^EXPANSION,你也會在屏幕的底部看到它。 ^表示「在行首搜索」,EXPANSION表示「查找字符串」EXPANSION「,然後鍵入<enter> - 並且您應該首次出現在行首的EXPANSION一詞。在這裏它描述了bash shell在你的行上輸入並在執行轉換後的命令之前在你的行上所做的所有類型的擴展

當在尋呼機中,你可以輸入h來獲得可能的命令列表。

我希望這是不是太基礎,如果你還沒有看到它之前,它是很難搞清楚。

2

在某些存儲庫git describe --tags沒有提供任何信息,並且一個簡單的git tag | tail -1可能會讓你錯誤的標籤,因爲git以奇怪的方式排序標籤。

對我來說最好的命令是尾部一個

VERSION = $的變化(GIT標籤|排序-V |尾-1)

+0

排序:無效選項 - V – Andy

+0

\。[0-9] \ + $「| sort -t。-k 1,1n -k 2,2n -k 3,3n | tail -1)' –

60
# Get new tags from remote 
git fetch --tags 

# Get latest tag name 
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) 

# Checkout latest tag 
git checkout $latestTag 
+4

更密集的,跳過變量'git checkout $( git describe --tags'git rev-list --tags --max-count = 1')' – ThorSummoner

+1

@ThorSummoner謝謝,但是您的back-ticks在格式化時丟失了。使用嵌套的'$()'代替:'git checkout $(git describe --tags $(git rev-list --tags --max-count = 1))' –

0

「混帳標籤 - -contains | tail -1「,(git tag --contains)列出當前分支中的所有標籤,(tail -1)將輸出結果的計數限制爲l,並且是最新的。