2012-08-27 98 views

回答

2

第一個(轉義的)例子被git擴展了,並且會匹配所有跟蹤的文件,而不管它們是否真的存在於樹中。第二個由shell擴展,並且只會匹配存在的文件。例如,做rm *.log; git rm *.log會從你的目錄中刪除文件,但是而不是將它們從git索引中刪除。事實上,「git rm」命令將返回一個錯誤,因爲你沒有指定任何文件。

+1

如果沒有找到匹配'* .log'的文件,默認情況下,Bash會傳遞'* .log'。 –

1

我不使用git,所以這更多的是一般思路。

看看這個:

[email protected]:~$ echo *.cpp 
Test1.cpp Test2.cpp Test.cpp 

[email protected]:~$ echo \*.cpp 
*.cpp 

現在,如果「回聲」是的東西,在源代碼庫運行,第一個版本將專門解決文件存在於我的工作目錄中,如果「git」軟件擴展通配符,該目錄可能與第二個版本可能使用的列表相同或不同。我的工作目錄可能只是源代碼庫知道的文件的一個子集。

在很多情況下,工作目錄應該與存儲庫的內容大致相同,在這種情況下應該沒有真正的區別,但是您也可以在存儲庫中執行諸如「清除所有這些文件」之類的操作,而不必先打擾檢查他們(爲什麼你,如果你想要刪除它們呢......)

根據git如何處理路徑名,用路徑名指定一個模式可能更有區別:/*.cpp會明確列出我的根目錄中的文件可能不是任何存儲庫的一部分。將其作爲/\*.cpp轉義可能會告訴存儲庫軟件在它使用的任何匹配文件上工作,因爲它是內部根目錄。