git add *(星号)vs git add。 (期)

我是新来的混帐,我有一个关于在git中添加文件的问题。 我已经find了多个关于git add .之间的区别的stackoverflow问题git add .git add -agit add --allgit add -A等。但是我一直无法find解释git add *做什么的地方。 我甚至看过git添加手册页 ,但没有帮助。 我一直在使用它来代替git add . 我的同事问我为什么。 我没有答案。 我一直使用git add *

git add .git add *相同? 是否仅从当前目录添加更改的文件,而另一个是从当前目录和子目录(recursion地)添加文件?

有一个伟大的图表列出了其他堆栈问题之一,显示了git add -A git add .之间的区别git add .git add -u ,但它没有git add *

在这里输入图像说明

注意:我明白使用星号作为通配符(添加给定扩展名的所有文件)意味着什么。 例如, git add *.html会添加所有扩展名为.html文件(但忽略.css.js等)。

谢谢您的帮助!

add *表示添加当前目录中的所有文件,名称以点开头的文件除外。 这是你的shellfunction,Git只能收到一个文件列表。

add . 在你的shell中没有特别的意义,因此Gitrecursion地添加了整个目录,这几乎是相同的,但是包括名字以点开头的文件。

*不是git的一部分 – 它是shell解释的通配符。 *扩展到当前目录中的所有文件,然后只传递给git,这add它们全部add. 是当前目录本身, git add它将添加它和它下面的所有文件。

使用点. 在shell中通常表示“当前目录”。

在shell上使用星号*时,会使用名为file-globbing的function。 例如在bash中,函数glob()就是这样做的。 glob( man 7 glob )的手册说:

描述

 Long ago, in UNIX V6, there was a program /etc/glob that would expand wildcard patterns. Soon afterward this became a shell built-in. These days there is also a library routine glob(3) that will perform this function for a user program. 

通配符匹配

 A string is a wildcard pattern if it contains one of the characters '?', '*' or '['. 

通配符

 Globbing is the operation that expands a wildcard pattern into the list of pathnames matching the pattern. 

这意味着当你将parameter passing给命令行中包含'?''*''[' ,首先通配符将通配符模式扩展为文件列表,然后将这些文件作为parameter passing给程序本身。

'git add .'之间'git add .'含义不同 和'git add *'由Denis明确描述:

git add期望一个要添加的文件列表。 在上面的例子中,shell扩展*. 并将结果作为参数给git add。 现在不同的是,用git add . git将扩展到当前目录,而git add *触发文件通配符,并扩展到不以点开头的所有文件和目录。