【问题标题】:git grep by file extensionsgit grep 按文件扩展名
【发布时间】:2012-12-01 19:21:43
【问题描述】:

我知道,如果我只想在具有特定扩展名的文件上查找模式,我可以这样做:

// searches recursively and matches case insensitively in only javascript files
// for "res" from the current directory
grep -iIr --include=*.js res ./

我也一直在尝试通过 git grep 寻找一种方法来执行此操作(以利用 git grep 从它存储在其树中的索引的速度),但无济于事。我看到here 排除某些文件类型是不可能的。

【问题讨论】:

    标签: git grep file-extension


    【解决方案1】:

    如果要搜索所有分支,可以使用以下命令:

    git log -Sres --all --name-only -- '*.js'
    

    (我看到你指定了 git grep;对我来说,这里的方法似乎更简单,更容易记住——更像是我通常需要的其他操作。)

    【讨论】:

      【解决方案2】:

      是的,例如:

      git grep res -- '*.js'
      

      【讨论】:

      • 稍作修改 - 如果您不在存储库的根目录中,git grep res -- '/*.js' 可能会更好...
      • 只是额外的信息:如果您想指定一组文件扩展名,您可以使用git grep res -- *.js *.cs,这在另一个question 中有介绍
      • -- 完成了什么?
      • 不要忘记的重要一点是 '*.js' 周围的单引号。如果他们不在那里,它将无法正常工作。 (shell 会在它到达 git 之前拦截它)。
      • aehlke -- 是许多 git 命令中的常用分隔符,用于将参数与一组要操作的文件分开。
      【解决方案3】:

      尝试这样做:

      find . -type f -iname '*.js' -exec grep -i 'pattern' {} +
      

      【讨论】:

      • {} 是当前文件,+ 表示同时处理最大参数,这与{} \; 不同(一次只处理一个文件)。检查man find
      • 问题要求“git” grep。
      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 2017-02-12
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2016-03-24
      • 2016-07-08
      • 1970-01-01
      相关资源
      最近更新 更多