git add -A
和git add -A :/
是相同的。但是神奇的路径规范:/
不是新的,可以追溯到git 1.7.6(2011年4月)。请参见提交8a42c98。它在Documentation/glossary-content.txt
中有记录。:
开头的路径规范具有特殊含义。在短格式中,前导冒号:
后跟零个或多个“魔术签名”字母(可选地由另一个冒号:
终止),其余部分是要与路径匹配的模式。:top: or :/
/
)可以使模式从工作树的根目录开始匹配,即使你从子目录内运行命令也可以。
:/
'的文件夹(git add -A :/
),这只有在git 2.7(2015年11月)才能实现。gitster
)。自Git 2.0以来,“add -u
”和“add -A
”从子目录运行时没有任何路径规范意味着“工作树中的所有内容”(在2.0之前,它们仅限于当前目录)。将限制当前目录的功能是通过在最终用户未提供任何路径规范时将“.
”插入到命令行中实现的。在2.0中,我们更新了代码,通过使用路径规范魔术“top
”,将“:/
”(而不是'.
')插入到顶层以考虑一切。git add -A
)不再使用 :/
,这使得 git add -A :/
实际上能够添加一个名为 :/
的文件夹(而不是被之前的提交中 git add -A
内部使用的魔法路径 :/
覆盖)。 - VonCgit add -A :/
命令会将所有更改添加到索引,即使您当前不在顶级项目文件夹中。但在后续的Git版本中,它与git add -A
相同。
假设您的项目结构如下:
➜ top git:(master) tree .
.
├── b.c
└── subfolder
└── a.c
然后你在b.c
中更改了代码,但你现在位于子文件夹
中
➜ subfolder git:(master) ✗ git st
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ../b.c
no changes added to commit (use "git add" and/or "git commit -a")
git add .
不会将b.c
添加到索引中,旧的git add -A
也一样。但在旧版本的git中,git add -A:/
可以解决问题。
如需更多信息,请阅读如果在使用-A选项时未给出pathspec,则更新整个工作树中的所有文件(旧版本的Git仅限于当前目录及其子目录)。
git help add
和git help gitglossary
。