git add -A :/
即使您当前不在顶级项目文件夹中,也会将所有更改添加到索引中。但在后来的 git 版本中,它是一样的git add -A
假设你有这样的项目:
\n\n\xe2\x9e\x9c top git:(master) tree .\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b.c\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subfolder\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a.c\n
Run Code Online (Sandbox Code Playgroud)\n\n然后您更改了 中的代码b.c
,但您当前处于subfolder
\xe2\x9e\x9c subfolder git:(master) \xe2\x9c\x97 git st\nOn branch master\nChanges not staged for commit:\n (use "git add <file>..." to update what will be committed)\n (use "git checkout -- <file>..." to discard changes in working directory)\n\n modified: ../b.c\n\nno changes added to commit (use "git add" and/or "git commit -a")\n
Run Code Online (Sandbox Code Playgroud)\n\ngit add .
现在运行不会添加b.c
到您的索引,旧的也git add -A
不会。但在较旧的 git 中,就可以了。git add -A :/
\n\n\n如果使用 -A 选项时未给出路径规范,则更新整个工作树中的所有文件(旧版本的 Git 用于限制对当前目录及其子目录的更新)。
\n
欲了解更多信息,请阅读\n git help add
\ngit help gitglossary
从git 2.0开始,git add -A
和git add -A :/
都是一样的。
但是神奇的路径规范:/
并不是新的,可以追溯到 git 1.7.6(2011 年 4 月)。请参阅提交 8a42c98。它记录在Documentation/glossary-content.txt
以冒号开头的路径规范
:
具有特殊含义。
在简短形式中,前导冒号:
后跟零个或多个“魔术签名”字母(可选地以另一个冒号终止:
),其余部分是与路径匹配的模式。
:top: or :/
Run Code Online (Sandbox Code Playgroud)
魔术字
top
(魔术签名:)/
使模式从工作树的根开始匹配,即使您从子目录中运行命令也是如此。
请注意,如果您想添加一个名为 ' :/
' ( git add -A :/
)的文件夹,这只能在 git 2.7(2015 年 11 月)中实现,
请参阅Junio C Hamano ( )提交的 29abb33(2015 年 10 月 25 日)。 gitster
从 Git 2.0 开始,"
add -u
" 和 "add -A
" 从没有任何路径规范的子目录运行意味着“工作树中的所有内容”(在 2.0 之前,它们仅限于当前目录)。当最终用户没有给我们任何路径规范时,通过在命令行中
插入“.
”来实现对当前目录的限制。
在 2.0 中,我们更新了代码以插入“:/
”(而不是“.
”)以通过使用路径规范魔术“top
”来考虑顶级的所有内容。
(这不再需要,并在所说的提交 29abb33 中修复:即将到来的 git 2.7git add -A
不再使用的实现:/
)
顺便说一句,这种简化还修复了一个角落案例错误,该错误源于“
:/
”不一定意味着任何魔法。
当用户git --literal-pathspecs add -u :/
有一个目录 ':
' 并想在其中添加所有内容时,用户会从命令行说“ ” (并且她知道她:/
将被视为“阳光下的一切”魔法路径规范,除非她使用 禁用魔法--literal-pathspecs
)。
:/
当使用“--literal-pathspecs”运行时,' '的内部使用与明确给出的“:/”的行为方式相同,并且不会像代码最初预期的那样在阳光下添加所有内容。
由于:/
不再使用内部使用, agit --literal-pathspecs add -u :/
将实际工作,并在名为“列”(' :
')的文件夹下添加文件。