2014-02-22 49 views
6

我幾個月前升級Git和自那時以來,我一直在嘗試git add --update收到以下已取消通知:沒有「添加--update的git(或-u)」的行爲:在2.0版本的git add --update語法中,/(冒號,正斜槓)的含義是什麼?

警告路徑 樹的子目錄中的參數將在Git 2.0中更改,並且不應再使用 。要爲整個樹添加內容,運行:

混帳添加--update:/(或git的添加-u:/)

要限制該命令將當前目錄,運行:

混帳添加 - 更新。 (或git add -u。)

對於當前的Git版本,該命令僅限於當前的 目錄。

該警告本身具有非常好的意義,它爲我節省了一些重置資源。我已經習慣於輸入.:/,但仍然覺得後者很奇怪,因爲它不像我遇到的任何其他命令行語法。 .是非常令人信服的:它只是意味着「當前目錄」,如find .,但:/ ......從來沒有見過,除了在這種情況下。這是什麼意思?

我一直認爲它是一個表情符號,當然不是這樣嗎?

回答

4

它實際上是對現有語法的擴展:這種名稱在很長一段時間內一直是有效的gitrevisions語法。

冒號前綴名通常是指路徑的索引(分段區)中,以同樣的方式,一個版本名稱後面跟着冒號和路徑是指在給定的版本的路徑:master~3:foo是文件foo的分支版本master之前的三個版本。所以:foo是下一次提交的foo的版本。

但是,請注意,冒號後跟斜槓通常用於通過提交日誌消息來搜索提交,如gitrevisions中的:/fix示例。

這些路徑名通常植根於樹的頂部(而不是您在工作樹內的任何位置)。例如,如果您的存儲庫只有兩個文件,但它們被命名爲READMEdir/sub.txt,並且您位於dir,則仍然編寫master~3:dir/sub.txtmaster~3:README。你可以讓git通過強制相對路徑名自動查看dir/git show master~3:./sub.txtgit 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路徑是有意義的,但對於以冒號爲前綴的路徑,爲什麼? (在給定一堆現有代碼的情況下,它可能更容易實現。)

1

:/符號演變在GIT中2.8(2016年3月)用 '^{/!-<negative pattern>}' 表示法::/!-foo

通過Will Palmer (wpalmer)參見commit 0769854(2016年1月31日),和commit 06b6b68(2016年1月10日)。
(在commit fb79532Junio C Hamano -- gitster --合併,2016年2月10日)

要命名的提交,你現在可以使用:/!-<negative pattern>正則表達式 風格,必然,說

$ git rev-parse HEAD^{/!-foo} 

,它會返回HEAD可達到的第一個提交的散列,其提交消息不包含「012」的「。
這與現有的<rev>^{/<pattern>}語法相反。

這是專門用於執行操作,不包括包含特定標記的最近提交。
例如,如果您傾向於進行「正在進行中」提交,並且消息以「WIP」開頭,那麼您可以使用「最近提交不是WIP提交」的差異。
這種事情現在可以通過如命令:

$ git diff @^{/!-^WIP} 

領袖「/!-」,而不是簡單的「/!」,表示是負匹配, 選擇留有餘地爲將來的其他修飾符。

new git/revisions doc現在狀態:

爲了匹配開始的字符串的消息,可以使用例如':/^foo'。
特殊序列「:/!」被保留用於修飾什麼是匹配:

  • :/!-foo執行消極比賽
  • 而「:/!!foo」匹配字符「!」字符,然後是'foo'。
  • 任何其他以':/!'開頭的序列現在都被保留。
相關問題