git add *命令之间和git add .我输入参数时*有什么区别.?在这两种情况下,文件系统返回什么列表?
Dan*_*Dan 32
*是一个 bash 全局变量。它将扩展到您所在目录中的所有文件,不包括点文件(以点 ( .) 开头的文件)。.表示当前目录。根据目录的内容以及是否有文件,结果可能会有很大不同.gitignore。
假设您的目录中有以下文件和目录:
.dotfile-that-must-be-committed
.git/
.gitignore
some-file-that-is-in-gitignore
some-other-file
Run Code Online (Sandbox Code Playgroud)
当您运行时git add *,glob 将在 git 命令运行之前展开。那么 git 命令接收到的内容如下:
git add some-file-that-is-in-gitignore some-other-file
Run Code Online (Sandbox Code Playgroud)
这会导致四个问题。
some-file-that-is-in-gitignore会要求你添加force( )参数。-f.dotfile-that-must-be-committed均未.gitignore添加,因为*不会扩展为点文件。*则永远无法扩展到这些文件,因此删除的文件将不会被暂存。*则永远无法扩展为旧名称,但它将扩展为新名称。因此 git 会看到的是,您添加了一个新文件,并且由于旧名称没有暂存,您最终会发现同一个文件存在两次,即旧名称和新名称。但是,运行会git add .告诉 git 添加您所在的当前目录,而不指定要添加哪个文件。在这种情况下,git 将检查.gitignore文件并递归添加 .gitignore 中未提及的所有文件.gitignore。
总之:
git add .not git add *。更好的是:
git add full/file/paths这样您就不会错误地添加尚未准备好添加的内容。甚至更好:
git add -p查看您的更改并选择要添加的补丁。