我刚刚在 Code School 学习 git 课程 https://try.github.io/levels/1/challenges/1,对于 git add '*.txt' 和 git add *.txt 的不同行为感到困惑。
没有引号的字符串并没有添加所有内容。git rm 同样如此。为什么会这样?或者这只是网页版本特有的问题吗?
我刚刚在 Code School 学习 git 课程 https://try.github.io/levels/1/challenges/1,对于 git add '*.txt' 和 git add *.txt 的不同行为感到困惑。
没有引号的字符串并没有添加所有内容。git rm 同样如此。为什么会这样?或者这只是网页版本特有的问题吗?
文件通配符(例如
*.c
)可以添加所有匹配的文件。
*.txt
"。你可以在t/t4010-diff-pathspec.sh#L53-L56
中看到示例
提交8300016由Junio C Hamano (gitster
)添加了另一种防止文件通配符的方法,以及一些解释:
gitcli
: 对比shell和git中的通配符不习惯使用shell的人可能会在理解命令行参数如何被shell处理方面有智力上的理解,但仍然很难想象让shell扩展文件通配符与Git看到文件通配符以用作路径规范之间的区别。
许多命令允许在路径中使用通配符,但需要保护它们免受shell的影响。这两个意思是不同的:
--------------------------------
$ git checkout -- *.c
$ git checkout -- \*.c
--------------------------------
- 前者允许您的 shell 展开文件通配符,而您正在请求将工作树中的点-C 文件覆盖为索引中的版本。
- 后者将
*.c
传递给 Git,并要求检出与该模式匹配的索引中的路径到您的工作树。
git add '*.txt'
和git add \*.txt
会完成相同的工作。 - avasin