4

git add .git add *完成完全相同的事情吗?

4

2 回答 2

10

不,它不会。

*是一个 glob 模式,并且不会匹配以 a 开头的文件.

例如,假设这是当前目录,我有 2 个新文件要添加foo.bar

$ ls -l

-rw-r--r-- 1 me users     0 Mar  7 19:31 foo
-rw-r--r-- 1 me users     0 Mar  7 19:31 .bar

当我运行时git add *

$ git add *

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .bar

相反,如果我跑git add .

$ git add .

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   .bar
#   new file:   foo
#

顺便说一句,如果您只想添加您所在的特定目录下的所有文件,那么使用git add * .*会产生不正确的结果。

让我们考虑这种情况,我有 6 个新文件:

foo
.bar
mydir/abc
mydir/.def
mydir2/newfile1
mydir2/newfile2

如果我在mydir运行git add .git 只添加以下文件:

mydir/abc
mydir/.def

相反,如果您运行该命令git add * .*,git 会添加文件以及mydir上一级目录级别的任何更改,因为.*glob 模式也匹配../。换句话说,将添加以下文件:

foo
.bar
mydir/abc
mydir/.def
mydir2/newfile1
mydir2/newfile2
于 2013-03-08T03:30:13.687 回答
2

在很多情况下,它们是相同的,但并非总是如此。在第二种情况下,*shell 会使用普通的通配规则扩展 ,因此不会添加当前目录中以 a 开头的文件.,例如。

于 2013-03-08T03:30:22.387 回答