git add *(星号)vs git add。 (期)
我是新来的混帐,我有一个关于在git中添加文件的问题。 我已经find了多个关于git add .
之间的区别的stackoverflow问题git add .
和git add -a
, git add --all
, git 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 *
触发文件通配符,并扩展到不以点开头的所有文件和目录。