2017-04-18 133 views
2

我有這個commande行gitlab的標籤列表git tag -l如何在gitlab中保留2個最新的標籤並刪除最老的?

輸入:

echo listTags = $(git tag -l) 
listTags= v0.0.1 v0.0.2 v0.1.0 v0.1.0-1 v0.1.0-2 v0.1.0-3 v0.1.0-4 v0.1.0-5 

for tag in 'git tag -l' 
do 
    git tag -d $tag 
    git push -v origin :refs/tags/$tag 
done 

我想刪除所有的最古老的預發佈版本,並保持2最新

輸出:

echo listTags = $(git tag -l) 
listTags= v0.0.1 v0.0.2 v0.1.0 v0.1.0-4 v0.1.0-5 

我怎麼能解決這個問題的腳本貝殼?

+0

我假設你想要的是遵循一定的規則來選擇哪些標籤,根據刪除腳本根據一些規則,根據它看到的標籤存在。我認爲從你的例子來看,這個規則比你的文本解釋似乎更加複雜 - 即我認爲你正在尋找比Nir Gabay的答案更復雜的東西。在那種情況下,我認爲我們需要更清楚地解釋規則是什麼。另外,我強烈懷疑這超出了單獨的shell腳本所能做的事情; perl可能是一個更好的主意。 –

+0

@MarkAdelsberger:的確,我正在運行腳本以便從我的repo gitlab中自動刪除未使用的預發佈標籤,並且我們還必須保留最新的預發佈版,而且不刪除發佈版本。我認爲尼爾加貝的答案,它會刪除版本和預發佈版本 –

回答

0
git tag -l | sort -V |tail -2 

此命令爲您提供了最新的2個標籤

從命令刪除execpt結果所有標籤

+0

對不起,這個答案無法解決我的問題。因爲有可能會刪除發佈版本和預發佈版本。我只看到刪除預發佈版本。 –

+0

git tag -l | sort -V | grep「 - 」| tail -2 –

+0

git tag -l | sort -V | grep「 - 」| tail -2 Addind grep「 - 」到命令行,這意味着 該腳本將採用最新的2個標籤形成所有標籤中都有連字符。 從你的例子中,我可以看到只有預發行版有連字符,所以這可以爲你工作 –

相關問題