Spec-Zone.ru › Git

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

Вместо вывода каждой совпавшей строки выводит только имена файлов, содержащих (или не содержащих) совпадения. Для лучшей совместимости с git diff параметр --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

Выводит предшествующую строку с именем функции, содержащей совпадение, если только совпавшая строка сама не является именем функции. Имя определяется так же, как git diff определяет заголовки фрагментов патча (см. 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

Выводит окружающий текст: от предыдущей строки с именем функции до строки перед следующим именем функции, фактически показывая всю функцию, в которой найдено совпадение. Имена функций определяются так же, как git diff определяет заголовки фрагментов патча (см. Defining a custom hunk-header в gitattributes[5]).

-m <num>
--max-count <num>

Ограничивает количество совпадений в каждом файле. При использовании параметра -v или --invert-match поиск прекращается после указанного количества несовпадений. Значение -1 означает отсутствие ограничений на количество результатов (по умолчанию). При значении 0 выполнение завершается немедленно с ненулевым кодом возврата.

--threads <num>

Количество рабочих потоков grep. Дополнительную информацию см. в NOTES ON THREADS и 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].

Примеры

git grep time_t' -- *.[ch]

Ищет time_t во всех отслеживаемых файлах .c и .h в рабочем каталоге и его подкаталогах.

git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)

Ищет строку, содержащую #define и либо MAX_PATH, либо PATH_MAX.

git grep --all-match -e NODE -e Unexpected

Ищет строку, содержащую NODE или Unexpected, в файлах, содержащих строки, соответствующие обоим шаблонам.

git grep solution -- :^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, переходит к режиму git grep --no-index, если команда git grep запущена вне репозитория 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API