如何从 `git grep` 中省略很长的行?

How to omit very long lines from `git grep`?

我正在搜索我的存储库(使用 vim-fugitive 的 :Ggrep),我有不同的 .js 文件 - 缩小的和常规的。

我想从 git grep 中省略缩小的文件(换句话说 - 与查询匹配的很长的行)。我调查了 git help grep 并用谷歌搜索但找不到任何东西。欢迎所有想法。

grep 是一个命令行实用程序,用于在纯文本数据集中搜索与正则表达式匹配的行。 您可以使用正则表达式来限制搜索。

例如, 您可以使用花括号来控制出现的次数。例如,这表示 0 到 10:

/^[a-z]{0,10}$/

选项是:

{3} Exactly 3 occurrences;
{6,} At least 6 occurrences;
{2,5} 2 to 5 occurrences.

对我来说,最好的方法是创建一个名为 .gitattributes 的文件,内容如下:

*.min.js binary *.min.css binary

Benni 的解决方案相当不错。在此基础上,如果您想要一个稍微更通用的解决方案,请使用 git grep 在存储库中查找行长超过 1500 个字符的文本文件。然后在.git/info/attributes中标记这些文件binary。这是一个单行代码:

git grep -lI '.\{1500\}' | sed 's/$/ binary/' >> .git/info/attributes

你也可以在.gitattributes中记录这个,当然,如果你想版本化这个(并且你的团队同意)。

这实际上并没有按照要求省略长行,但是为了避免在匹配很长的行(例如缩小的javascript)时终端被填满,​​您可以配置 git 以使用 -S 选项(--chop-long-lines 的缩写)通过 less 分页输出:

# For current repo only
git config --local core.pager "less -S"

# For all git repos
git config --global core.pager "less -S"

或等效地将此添加到相关的 .gitconfig.git/config

[core]
    pager = less -S