En git 1.9.0 la "palabra mágica" excludese agregó a pathspecs. Entonces, si desea buscar foobaren todos los archivos, excepto los que coinciden *.java, puede hacer:
git grep foobar -- './*' ':(exclude)*.java'
O usando la !"forma corta" para excluir:
git grep foobar -- './*' ':!*.java'
Tenga en cuenta que en las versiones de git hasta v2.12, cuando se utiliza una exclusión pathspec, debe tener al menos un "inclusivo" pathspec. En los ejemplos anteriores, este es el ./*(incluya recursivamente todo en el directorio actual). En git v2.13 esta restricción se levantó y git grep foobar -- ':!*.java'funciona sin el ./*.
También puede usar algo como :(top)(forma corta:) :/para incluir todo desde la parte superior del repositorio. Pero es probable que también desee ajustar su exclusión pathspecpara comenzar también desde arriba: :/!*.java(de lo contrario, solo excluiría *.javaarchivos de su directorio actual).
Hay una buena referencia para todas las "palabras mágicas" que puede contener un pathspeca git-scm.com (o sólo git help glossary). Por alguna razón, los documentos en kernel.org están realmente desactualizados, aunque a menudo aparecen primero en las búsquedas de Google.