初始提交时,是“添加”。和“添加*”同义词?

时间:2013-03-08 03:28:31

标签: git

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

2 个答案:

答案 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使用常规通配规则扩展*,因此例如,当前目录中不会添加以.开头的文件。