git add - 当当前目录中没有模式匹配时,避免使用通配符从子目录添加文件

时间:2014-01-21 08:59:39

标签: git git-add

git add *.c应该仅从当前目录添加匹配文件,而不是从其子目录添加。我注意到如果没有文件与当前目录中的搜索模式匹配,git add *.c正在添加子目录中的匹配文件。

有人知道如何避免这种行为吗?

2 个答案:

答案 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模式,这会导致各种各样的片状行为。