В 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.