我刚刚在代码学校处理git课程https://try.github.io/levels/1/challenges/1,并对git add' * .txt'的不同行为感到困惑。和git add * .txt。
没有引用的字符串没有添加所有内容。 git rm也一样。为什么这样工作?或者它只是网络版本特定的?
答案 0 :(得分:6)
如“Wildcards inside quotes"”中所述,globbing不适用于单引号或双引号。
可以给出Fileglobs(例如
*.c
)来添加所有匹配的文件
*.txt
”(而不只是当前的文件夹)。 您可以在t/t4010-diff-pathspec.sh#L53-L56
的通配符
gitcli
:对应于shell和git不习惯使用shell的人可能在理智上理解命令行参数是如何被shell按摩的,但是仍然很难想象让shell扩展fileglobs和让Git看到fileglob用作pathspec。
许多命令允许路径中使用通配符,但您需要保护 它们不受壳体的影响。这两个意思不同 事情:
--------------------------------
$ git checkout -- *.c
$ git checkout -- \*.c
--------------------------------
- 前者让你的shell扩展fileglob,你问 工作树中的dot-C文件将被版本覆盖 在索引中。
- 后者将
*.c
传递给Git,你问的是 索引中与要检出的模式匹配的路径 工作树。