git add之间有区别吗?和“ git add *”关于结果?

时间:2019-12-04 16:32:11

标签: git git-add

两者似乎都将所有内容添加到当前目录中。 Git add documentation指向pathspec,后者指向fnmatch(3)

文档建议git add .将在当前目录中添加所有内容,而git add *将添加与*相匹配的所有内容,而该内容恰好是当前目录中的所有内容。那么这应该导致相同的结果吧?也许git add .的性能更高,因为我们不必先扩展全局范围?

1 个答案:

答案 0 :(得分:1)

  

这将导致相同的结果正确吗?

不完全

由于*与外壳程序中的隐藏文件不匹配,因此git add *不会在当前目录中添加隐藏文件/目录(但子目录中的隐藏文件将匹配,因为您添加了完整目录)

git add .将添加所有内容,包括当前目录中的隐藏文件。

简单的POC来说明:

$ tree -a
.
├── blah
├── .hidden
└── some
    ├── dir
    │   ├── .hidden
    │   └── titi
    ├── .hidden
    └── tata

2 directories, 6 files

$ git init
Initialized empty Git repository in /mydir/.git/

$ git add *

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   blah
    new file:   some/.hidden
    new file:   some/dir/.hidden
    new file:   some/dir/titi
    new file:   some/tata

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    .hidden

$ git add .

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   .hidden
    new file:   blah
    new file:   some/.hidden
    new file:   some/dir/.hidden
    new file:   some/dir/titi
    new file:   some/tata