1

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

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

4

2 回答 2

3

当 git 处理通配符时,它应该匹配任何级别的文件。您看到此行为的原因是*.c,如果该通配符在当前目录中匹配,则 shell 会扩展为一个明确的文件列表。在这种情况下,Git 会看到.c文件的明确列表,而不是通配符。

如果由于当前目录中没有文件与该模式匹配而导致 shell 无法扩展*.c,则通配符模式将未扩展地传递给 Git,Git 将自行执行扩展并匹配子目录。

如果您使用的是 bash,您可以使用shopt -s nullglob它使 shell 将通配符扩展为空,或者在模式不匹配shopt -s failglob时产生错误并且不运行。git add

于 2014-01-21T09:09:50.957 回答
2

git add "/*.c"应该做的伎俩。

前导斜杠告诉 Git 只查看当前文件夹。

请注意,您应该始终引用它,否则 shell 可能会在 Git 看到它之前尝试扩展 glob 模式,这会导致各种不稳定的行为。

于 2014-01-21T09:08:34.507 回答