У git 1.9.0 до " s " excludeбуло додано "магічне слово" pathspec. Отже, якщо ви хочете шукати foobarу кожному файлі, крім відповідних, *.javaви можете зробити:
git grep foobar -- './*' ':(exclude)*.java'
Або використовуючи !"коротку форму" для виключення:
git grep foobar -- './*' ':!*.java'
Зауважте, що у версіях git до v2.12 при використанні виключення pathspecви повинні мати принаймні один "включно" pathspec. У наведених вище прикладах це ./*(рекурсивно включати все під поточний каталог). У git v2.13 це обмеження було знято і git grep foobar -- ':!*.java'працює без ./*.
Ви також можете використати щось на зразок :(top)(коротка форма :/:), щоб включити все, що знаходиться вгорі репо. Але тоді ви, ймовірно, також захочете скорегувати своє виключення, pathspecщоб почати також зверху: :/!*.java(інакше це виключить лише *.javaфайли з вашого поточного каталогу).
Є хороша довідка для всіх "магічних слів", дозволених на pathspecсайті git-scm.com (або просто git help glossary). Чомусь документи на kernel.org дійсно застаріли, хоча вони часто з’являються першими в пошуку Google.