git add .
和git add *
会完成相同的事情吗?
答案 0 :(得分:10)
不,不会。
*
是一个glob模式,不匹配以.
开头的文件
例如,让它成为当前目录,我有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 * .*
的BTW会产生不正确的结果。
让我们考虑一下这个案例,我有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
答案 1 :(得分:2)
在很多情况下,它们会是相同的,但并非总是如此。在第二种情况下,shell使用常规通配规则扩展*
,因此例如,当前目录中不会添加以.
开头的文件。