git add *.c
应该只从当前目录添加匹配文件,而不是从其子目录添加。我注意到如果没有文件与当前目录中的搜索模式git add *.c
匹配,则从子目录中添加匹配的文件。
有谁知道如何避免这种行为?
当 git 处理通配符时,它应该匹配任何级别的文件。您看到此行为的原因是*.c
,如果该通配符在当前目录中匹配,则 shell 会扩展为一个明确的文件列表。在这种情况下,Git 会看到.c
文件的明确列表,而不是通配符。
如果由于当前目录中没有文件与该模式匹配而导致 shell 无法扩展*.c
,则通配符模式将未扩展地传递给 Git,Git 将自行执行扩展并匹配子目录。
如果您使用的是 bash,您可以使用shopt -s nullglob
它使 shell 将通配符扩展为空,或者在模式不匹配shopt -s failglob
时产生错误并且不运行。git add
git add "/*.c"
应该做的伎俩。
前导斜杠告诉 Git 只查看当前文件夹。
请注意,您应该始终引用它,否则 shell 可能会在 Git 看到它之前尝试扩展 glob 模式,这会导致各种不稳定的行为。