会git add .
和git add *
完成完全相同的事情吗?
问问题
53 次
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 回答