git-grep
Имя
git-grep — вывод строк, соответствующих шаблону
Краткое описание
git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
[-v | --invert-match] [-h|-H] [--full-name]
[-E | --extended-regexp] [-G | --basic-regexp]
[-P | --perl-regexp]
[-F | --fixed-strings] [-n | --line-number] [--column]
[-l | --files-with-matches] [-L | --files-without-match]
[(-O | --open-files-in-pager) [<pager>]]
[-z | --null]
[ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
[--max-depth <depth>] [--[no-]recursive]
[--color[=<when>] | --no-color]
[--break] [--heading] [-p | --show-function]
[-A <post-context>] [-B <pre-context>] [-C <context>]
[-W | --function-context]
[(-m | --max-count) <num>]
[--threads <num>]
[-f <file>] [-e] <pattern>
[--and|--or|--not|(|)|-e <pattern>…]
[--recurse-submodules] [--parent-basename <basename>]
[ [--[no-]exclude-standard] [--cached | --untracked | --no-index] | <tree>…]
[--] [<pathspec>…] Описание
Ищет указанные шаблоны в отслеживаемых файлах рабочего дерева, объектах blob, зарегистрированных в файле индекса, или объектах blob в указанных объектах tree. Шаблоны представляют собой списки из одного или нескольких выражений поиска, разделённых символами новой строки. Пустая строка в качестве выражения поиска соответствует всем строкам.
Параметры
-
--cached -
Вместо поиска в отслеживаемых файлах рабочего дерева выполняет поиск в объектах blob, зарегистрированных в файле индекса.
-
--untracked -
В дополнение к поиску в отслеживаемых файлах рабочего дерева выполняет поиск и в неотслеживаемых файлах.
-
--no-index -
Ищет файлы в текущем каталоге, который не управляется Git, либо игнорирует тот факт, что текущий каталог управляется Git. Это во многом похоже на запуск обычной утилиты
grep(1) с указанным параметром-r, но имеет некоторые дополнительные преимущества, например позволяет ограничивать пути с помощью шаблонов pathspec; дополнительную информацию см. в статьеpathspecв gitglossary[7].Этот параметр нельзя использовать вместе с
--cachedили--untracked. См. такжеgrep.fallbackToNoIndexниже, в разделеCONFIGURATION. -
--no-exclude-standard -
Выполняет поиск также в игнорируемых файлах, не учитывая механизм
.gitignore. Полезно только вместе с--untracked. -
--exclude-standard -
Не учитывает игнорируемые файлы, указанные с помощью механизма
.gitignore. Полезно только при поиске файлов в текущем каталоге с помощью--no-index. -
--recurse-submodules -
Рекурсивно выполняет поиск в каждом активном подмодуле, извлечённом в репозитории. При использовании вместе с параметром
<tree>перед выводом каждого подмодуля указывается имя объекта<tree>родительского проекта. Этот параметр нельзя использовать вместе с--untracked; он не действует, если указан параметр--no-index. -
-a -
--text -
Обрабатывает двоичные файлы как текст.
-
--textconv -
Учитывает настройки фильтров textconv.
-
--no-textconv -
Не учитывает настройки фильтров textconv. Используется по умолчанию.
-
-i -
--ignore-case -
Игнорирует различия в регистре между шаблонами и файлами.
-
-I -
Не сопоставляет шаблон с двоичными файлами.
-
--max-depth<depth> -
Для каждого
<pathspec>, указанного в командной строке, спускается не более чем на<depth>уровней каталогов. Значение -1 означает отсутствие ограничений. Этот параметр игнорируется, если<pathspec>содержит активные подстановочные знаки. Другими словами, если «a*» соответствует каталогу с именем «a*», то «*» воспринимается буквально, и--max-depthпо-прежнему действует. -
-r -
--recursive -
То же, что и
--max-depth=-1; используется по умолчанию. -
--no-recursive -
То же, что и
--max-depth=0. -
-w -
--word-regexp -
Сопоставляет шаблон только на границе слова (в начале строки или после символа, не являющегося частью слова; в конце строки или перед символом, не являющимся частью слова).
-
-v -
--invert-match -
Выбирает строки, не соответствующие шаблону.
-
-h -
-H -
По умолчанию команда выводит имя файла для каждого совпадения. Параметр
-hотключает этот вывод. Параметр-Hпредусмотрен для полноты и ничего не делает, кроме отмены параметра-h, указанного ранее в командной строке. -
--full-name -
При запуске из подкаталога команда обычно выводит пути относительно текущего каталога. Этот параметр заставляет выводить пути относительно корневого каталога проекта.
-
-E -
--extended-regexp -
-G -
--basic-regexp -
Использует для шаблонов регулярные выражения POSIX: расширенные или базовые. По умолчанию используются базовые регулярные выражения.
-
-P -
--perl-regexp -
Использует для шаблонов регулярные выражения, совместимые с Perl.
Поддержка этих типов регулярных выражений является необязательной зависимостью на этапе компиляции. Если Git собран без поддержки таких выражений, указание этого параметра приведёт к аварийному завершению программы.
-
-F -
--fixed-strings -
Использует для шаблонов буквальные строки (не интерпретирует шаблон как регулярное выражение).
-
-n -
--line-number -
Добавляет к совпавшим строкам префикс с номером строки.
-
--column -
Добавляет префикс со смещением в байтах от начала совпавшей строки до первого совпадения (нумерация начинается с 1).
-
-l -
--files-with-matches -
--name-only -
-L -
--files-without-match -
Вместо вывода каждой совпавшей строки выводит только имена файлов, содержащих (или не содержащих) совпадения. Для лучшей совместимости с
gitdiffпараметр--name-onlyявляется синонимом--files-with-matches. -
-O[<pager>] -
--open-files-in-pager[=<pager>] -
Открывает совпавшие файлы в программе постраничного просмотра (а не вывод
grep). Если в качестве программы постраничного просмотра используется «less» или «vi» и пользователь указал только один шаблон, первый файл автоматически открывается на первом совпадении. Аргументpagerнеобязателен; если он указан, его нужно присоединить к параметру без пробела. Еслиpagerне указан, будет использоваться программа постраничного просмотра по умолчанию (см.core.pagerв git-config[1]). -
-z -
--null -
Использует \0 в качестве разделителя имён путей в выводе и выводит их без изменений. Без этого параметра имена путей с «необычными» символами заключаются в кавычки, как описано для переменной конфигурации
core.quotePath(см. git-config[1]). -
-o -
--only-matching -
Выводит только совпавшие (непустые) фрагменты строки, каждый на отдельной строке вывода.
-
-c -
--count -
Вместо вывода каждой совпавшей строки выводит количество совпавших строк.
-
--color[=<when>] -
Выделяет совпадения цветом. Значение должно быть
always(по умолчанию),neverилиauto. -
--no-color -
Отключает подсветку совпадений, даже если в файле конфигурации задан цветной вывод по умолчанию. То же, что и
--color=never. -
--break -
Выводит пустую строку между совпадениями из разных файлов.
-
--heading -
Выводит имя файла над совпадениями в этом файле, а не в начале каждой отображаемой строки.
-
-p -
--show-function -
Выводит предшествующую строку с именем функции, содержащей совпадение, если только совпавшая строка сама не является именем функции. Имя определяется так же, как
gitdiffопределяет заголовки фрагментов патча (см.Defining a custom hunk-headerв gitattributes[5]). -
-<num> -
-C<num> -
--context<num> -
Выводит
<num>предшествующих и последующих строк, а между непрерывными группами совпадений помещает строку, содержащую--. -
-A<num> -
--after-context<num> -
Выводит
<num>последующих строк, а между непрерывными группами совпадений помещает строку, содержащую--. -
-B<num> -
--before-context<num> -
Выводит
<num>предшествующих строк, а между непрерывными группами совпадений помещает строку, содержащую--. -
-W -
--function-context -
Выводит окружающий текст: от предыдущей строки с именем функции до строки перед следующим именем функции, фактически показывая всю функцию, в которой найдено совпадение. Имена функций определяются так же, как
gitdiffопределяет заголовки фрагментов патча (см.Defining a custom hunk-headerв gitattributes[5]). -
-m<num> -
--max-count<num> -
Ограничивает количество совпадений в каждом файле. При использовании параметра
-vили--invert-matchпоиск прекращается после указанного количества несовпадений. Значение -1 означает отсутствие ограничений на количество результатов (по умолчанию). При значении 0 выполнение завершается немедленно с ненулевым кодом возврата. -
--threads<num> -
Количество рабочих потоков
grep. Дополнительную информацию см. вNOTESONTHREADSиgrep.threadsвCONFIGURATION. -
-f<file> -
Читает шаблоны из
<file>, по одному на строку.Передача шаблона через
<file>позволяет задать шаблон поиска, содержащий \0.Не все типы шаблонов поддерживают шаблоны, содержащие \0. Git выдаст ошибку, если указанный тип шаблона не поддерживает такой шаблон. Тип шаблона
--perl-regexpпри сборке с внутренним механизмом PCRE v2 поддерживает такие шаблоны наиболее полно.В версиях Git до 2.23.0 шаблоны, содержащие \0, без предупреждения считались буквальными строками. Это поведение никогда не документировалось; также существовали необычные и недокументированные взаимодействия, например между шаблонами с не-ASCII символами, содержащими \0, и
--ignore-case.В будущих версиях мы, возможно, добавим поддержку шаблонов, содержащих \0, для большего числа механизмов поиска; до тех пор выполнение будет аварийно завершаться, если соответствующий тип шаблона их не поддерживает.
-
-e -
Следующий параметр — шаблон. Этот параметр необходимо использовать для шаблонов, начинающихся с
-, и следует использовать в сценариях, передающих grep пользовательский ввод. Несколько шаблонов объединяются операторомor. -
--and -
--or -
--not -
(
...) -
Задаёт способ объединения нескольких шаблонов с помощью логических выражений.
--or— оператор по умолчанию. Оператор--andимеет более высокий приоритет, чем--or. Для всех шаблонов необходимо использовать-e. -
--all-match -
При задании нескольких выражений шаблона, объединённых с помощью
--or, этот флаг ограничивает поиск файлами, в которых есть строки, соответствующие каждому из них. -
-q -
--quiet -
Не выводит совпавшие строки; вместо этого завершается с кодом 0, если найдено совпадение, и с ненулевым кодом, если совпадений нет.
- <tree>...
-
Вместо поиска в отслеживаемых файлах рабочего дерева выполняет поиск в объектах blob указанных деревьев.
-
-- -
Обозначает конец параметров; оставшиеся параметры являются ограничителями
<pathspec>. - <pathspec>...
-
Если указан, ограничивает поиск путями, соответствующими хотя бы одному шаблону. Поддерживаются совпадения с начальными путями и шаблоны
glob(7).Подробнее о синтаксисе
<pathspec>см. в статьеpathspecв gitglossary[7].
Примеры
-
gitgreptime_t'--*.[ch] -
Ищет
time_tво всех отслеживаемых файлах .c и .h в рабочем каталоге и его подкаталогах. - git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)
-
Ищет строку, содержащую
#defineи либоMAX_PATH, либоPATH_MAX. -
gitgrep--all-match-eNODE-eUnexpected -
Ищет строку, содержащую
NODEилиUnexpected, в файлах, содержащих строки, соответствующие обоим шаблонам. -
gitgrepsolution--:^Documentation -
Ищет
solution, исключая файлы вDocumentation.
Примечания о потоках
Параметр --threads (и настройка grep.threads) игнорируется при использовании --open-files-in-pager, что приводит к выполнению в одном потоке.
При поиске в хранилище объектов (с помощью --cached или с указанием объектов tree) запуск с несколькими потоками может оказаться медленнее однопоточного режима, если задан параметр --textconv и требуется выполнить слишком много преобразований текста. Поэтому при низкой производительности в этом случае может быть целесообразно использовать --threads=1.
Настройка
Всё содержимое ниже этой строки в данном разделе выборочно включено из документации git-config[1]. Оно совпадает с содержимым соответствующей документации:
-
grep.lineNumber -
Если установлено значение
true, по умолчанию включает параметр-n. -
grep.column -
Если установлено значение
true, по умолчанию включает параметр--column. -
grep.patternType -
Задаёт поведение сопоставления по умолчанию. Значения
basic,extended,fixedилиperlвключают соответственно параметры--basic-regexp,--extended-regexp,--fixed-stringsили--perl-regexp; значениеdefaultиспользует параметрgrep.extendedRegexpдля выбора междуbasicиextended. -
grep.extendedRegexp -
Если установлено значение
true, по умолчанию включает параметр--extended-regexp. Этот параметр игнорируется, если для параметраgrep.patternTypeзадано значение, отличное отdefault. -
grep.threads -
Количество рабочих потоков grep. Если параметр не задан (или установлен в 0), Git использует столько потоков, сколько доступно логических ядер.
-
grep.fullName -
Если установлено значение
true, по умолчанию включает параметр--full-name. -
grep.fallbackToNoIndex -
Если установлено значение
true, переходит к режимуgitgrep--no-index, если командаgitgrepзапущена вне репозитория git. По умолчанию установлено значениеfalse.
grep
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-grep