2014-01-11 25 views
0

我們的倉庫中的每個提交都有一個與其關聯的標記。分支上有很多標籤中有「B7」的標籤。我可以運行gitk並排除所有這些「B7」標籤嗎?相反,如何運行gitk並只顯示做的中有「B7」的提交?使用gitk時只顯示某些標籤?

我厭倦了做gitk --all並得到一堆額外的絨毛。

回答

2

它發生在我寫這個的一半,也許你想顯示提交,但只是想要一些提交不顯示標籤指向他們。這回答了一個問題:「我如何看到從某些或所有分支可訪問的所有提交,但不提交從那些分支不可訪問的某些標記可​​訪問?」。


gitk採用相同的選項git-rev-list,用於選擇提交顯示量。因此,您可以提供--branches和/或--tags,而不是--all,它們都接受「模式」參數。

不幸的是,該模式參數是外殼的glob風格模式,它很容易包括那些含有B7*B7*會做的伎倆),但很難排除那些包含的東西,有B7嵌入在其內的任意位置。如果B7是名稱的開始年底它不太困難,但還是有點混亂:--tags="[AC-Za-z]*" --tags="B[A-Za-z0-689]*",例如,可能是不夠好,匹配兩個或更多的字符不B7開始標籤(添加--tags="?"以包含單字符標籤)。

(這裏的雙引號是爲了防止shell嘗試擴展shell風格的globs,儘管在大多數shell變體中,只要沒有[當前目錄]中名稱以--tags=開頭的文件,可以逃脫沒有他們。)

對於充分的靈活性,可以使用git for-each-refgit show-ref枚舉引用,通過什麼管道裁判的名字,如grep -v包含或排除的任意正則表達式,並提供結果作爲參數傳遞給gitk。例如,看到所有分支上所有提交,加上承諾在

gitk --branches $(git for-each-ref --format='%(refname:short)' refs/tags/ | 
    grep -v B7) 

(沒有實際測試過,但簡單,應該工作,假設shbash彈)。

(對於cshtcsh,把一切都在同一行,或使用新行之前反斜線;與cmd ... `subcmd ...`取代cmd ... $(subcmd ...)反引號版本一般是劣質語法,因爲它不能被嵌套,但它會在這種情況下,這樣做即便。雖然我使用tcsh作爲交互式shell,但我改用sh來編寫腳本。)

+0

您有一些無與倫比的括號......我嘗試修復,但仍然收到'非法變量名'錯誤。你能修改你的答案嗎? –

+0

'$('是在第二行,右邊括號是一些shell變體會抱怨(甚至有些甚至沒有'$('作爲語法...),但是'sh'和'bash'應該是如果沒有的話,把它全部放在一行上,並使用反引號代替$(...)(這應該適用於csh/tcsh;對dash和zsh不知道)。 – torek

+0

感謝您的修正和解釋。這工作,做我想要的! –