git add' * .txt'之间的区别是什么?和git添加* .txt?

时间:2015-11-01 12:11:55

标签: git github

我刚刚在代码学校处理git课程https://try.github.io/levels/1/challenges/1,并对git add' * .txt'的不同行为感到困惑。和git add * .txt。

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

1 个答案:

答案 0 :(得分:6)

如“Wildcards inside quotes"”中所述,globbing不适用于单引号或双引号。

  

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

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

您可以在t/t4010-diff-pathspec.sh#L53-L56

中查看示例 <{> 3}} Commit 8300016增加了防止文件通配的另一种方法,还有一些解释:

  

gitcli:对应于shell和git

的通配符      

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

     

许多命令允许路径中使用通配符,但您需要保护      它们不受壳体的影响。这两个意思不同      事情:

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