2012-06-10 234 views
13

git animals過這樣一系列命令:git add *和git add。有什麼區別?

git init 
git add * 
git commit -a -m ‘initial commit and release!’ 

什麼git add *相比git add .(我通常做的),他們是一致的嗎?

+0

*通常表示「匹配所有」和。意思是「當前目錄」,默認情況下是遞歸完成的。 – TylerH4

+0

@ TylerH4:但是如果'*'的擴展包含目錄,那麼在任何情況下都會通過git遞歸添加。 –

回答

17

git add *將增加所有可在外殼擴張*git add .的結果會告訴混帳添加當前目錄的路徑。

git add *將不會添加以.開頭的路徑,因爲*的外殼擴展將這些路徑視爲「隱藏」路徑。

git add *如果任何擴展的路徑正在由git的,因爲git的認爲它是一個錯誤,如果你明確指定一個被忽略的路徑,而沒有經過-f(力)標誌,以表明你真的想添加一個被忽略的路徑忽略也將失敗。

如果你得到git擴展glob(git add '*')它會添加「隱藏」文件並跳過忽略的文件。在這種情況下,它的工作原理與git add .相同。

+0

* shell *在這裏是指命令行應用程序還是操作系統? –

2

默認情況下,將目錄傳遞給git add將遞歸添加其子目錄和文件。

通配符*將由您的shell作爲當前目錄下的文件名進行擴展。

而你知道,在Unix中.只引用當前目錄,所以這兩個命令是等價的。雖然*由shell處理,.由git處理,但他們做同樣的事情。

+3

由於'*'由shell處理,所以不會考慮'.gitignore',而'.'會。 – wisbucky

相關問題