它實際上是對現有語法的擴展:這種名稱在很長一段時間內一直是有效的gitrevisions語法。
冒號前綴名通常是指路徑的索引(分段區)中,以同樣的方式,一個版本名稱後面跟着冒號和路徑是指在給定的版本的路徑:master~3:foo
是文件foo
的分支版本master
之前的三個版本。所以:foo
是下一次提交的foo的版本。
但是,請注意,冒號後跟斜槓通常用於通過提交日誌消息來搜索提交,如gitrevisions中的:/fix
示例。
這些路徑名通常植根於樹的頂部(而不是您在工作樹內的任何位置)。例如,如果您的存儲庫只有兩個文件,但它們被命名爲README
和dir/sub.txt
,並且您位於dir
,則仍然編寫master~3:dir/sub.txt
和master~3:README
。你可以讓git通過強制相對路徑名自動查看dir/
:git show master~3:./sub.txt
和git show master~3:../README
。由於:/fix
意味着搜索提交消息,因此無法在此處使用前導斜槓來表示樹的頂部,但由於路徑名始終始終從頂部開始,因此不需要。
在git add
的情況下,雖然,你不能真正地指的是什麼正在上演,現在 - 你試圖添加的東西,到舞臺,爲什麼會是怎麼上演現在回事? - SO :path
表示在當前樹中添加文件。由於一些古怪的原因,不像其他的git命令,git add
基於您當前的工作目錄工作,即使使用冒號語法,所以如果您在dir/
中,並且您編寫了git add :sub.txt
,它會添加./sub.txt
。您不能從git add :README
這裏。但你可以(與git 1.8至少 - 我不知道這是多久已經到位)git add :/README
,其中前導斜槓的意思是「轉義當前子目錄,並轉到存儲庫樹的頂部,而不是」。
如果你放棄了路徑名的其餘部分,你會得到:/
- 它確實看起來像一個表情符!但它指的是存儲庫頂部的目錄。但只限於git add
;對於其他git命令,它表示一個提交消息搜索字符串。
含義, 「不總是」。 Git對其許多規則的例外通常是明智的,但是卻難以解釋。 :-)
意思是「我不知道爲什麼」。當然,對於非 -colon-prefixed路徑是有意義的,但對於以冒號爲前綴的路徑,爲什麼? (在給定一堆現有代碼的情況下,它可能更容易實現。)