繁体   English   中英

git add'* .txt'和git add * .txt有什么区别?

[英]What's the difference between git add '*.txt' and git add *.txt?

我只是在代码学校处理git课程https://try.github.io/levels/1/challenges/1 ,并被git add'* .txt'和git add * .txt的不同行为搞糊涂了。

没有引用的字符串没有添加所有内容。 git rm也一样。 为什么这样工作? 或者只是网络版本?

正如“ 引号内部的通配符”中所提到的,globbing在单引号或双引号中都不起作用。

可以给出Fileglobs(例如*.c )来添加所有匹配的文件

  • 没有引号,globbing将由当前文件夹中的shell完成。
  • 使用引号,它可以防止shell的通配,并允许Git(与我的初始答案相反)处理所有工作树(而不仅仅是当前文件夹)中的pathspec*.txt ”。

您可以在t/t4010-diff-pathspec.sh#L53-L56查看示例


Junio C 提交的8300016 Hamano gitster增加了另一种防止文件通配的方法,还有一些解释:

gitcli :对比shell和git的对比

不习惯使用shell的人可能在理智上理解命令行参数是如何被shell按摩的,但是仍然很难想象让shell扩展fileglobs和让Git看到fileglob用作pathspec之间的区别。

许多命令允许在路径中使用通配符,但是您需要保护它们不被shell覆盖。 这两个意味着不同的东西:

--------------------------------
$ git checkout -- *.c
$ git checkout -- \*.c
-------------------------------- 
  • 前者允许你的shell扩展fileglob,并且你要求工作树中的dot-C文件被索引中的版本覆盖。
  • 后者将*.c传递给Git,并且您要求将索引中与模式匹配的路径检出到您的工作树。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM