git add *.c
应该仅从当前目录添加匹配文件,而不是从其子目录添加。我注意到如果没有文件与当前目录中的搜索模式匹配,git add *.c
正在添加子目录中的匹配文件。
有人知道如何避免这种行为吗?
答案 0 :(得分:3)
当git处理通配符时,它应该匹配任何级别的文件 。您看到此行为的原因是,如果该通配符在当前目录中匹配,则shell会将*.c
扩展为显式文件列表。在这种情况下,Git会看到.c
文件的明确列表,而不是通配符。
如果shell无法扩展*.c
,因为当前目录中没有文件与该模式匹配,则通配符模式将未扩展地传递给Git,后者执行扩展并在子目录中进行匹配。
如果您正在使用bash,则可以使用shopt -s nullglob
使外壳将通配符展开为空,或shopt -s failglob
生成错误,如果模式不是git add
则不运行{{1}}匹配。
答案 1 :(得分:2)
git add "/*.c"
应该可以解决问题。
前导斜杠告诉Git只查看当前文件夹。
请注意,你应该总是引用这个,否则shell可能会尝试在Git看到它之前扩展glob模式,这会导致各种各样的片状行为。