2012-06-10 92 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