Русский ▾ Topics ▾ Latest version ▾ git-grep last updated in 2.45.0

НАЗВАНИЕ

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) [<пейджер>]]
	   [-z | --null]
	   [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
	   [--max-depth <глубина>] [--[no-]recursive]
	   [--color[=<когда>] | --no-color]
	   [--break] [--heading] [-p | --show-function]
	   [-A <после-контекста>] [-B <до-контекста>] [-C <контекст>]
	   [-W | --function-context]
	   [(-m | --max-count) <число>]
	   [--threads <число>]
	   [-f <файл>] [-e] <шаблон>
	   [--and|--or|--not|(|)|-e <шаблон>…​]
	   [--recurse-submodules] [--parent-basename <базовое-имя>]
	   [ [--[no-]exclude-standard] [--cached | --untracked | --no-index] | <дерево>…​]
	   [--] [<спецификатор-пути>…​]

ОПИСАНИЕ

Искать указанные шаблоны в отслеживаемых файлах в рабочем каталоге, blob-объектах, зарегистрированных в файле индекса, или blob-объектах в заданных объектах деревьев. Шаблоны — это списки из одного или нескольких выражений поиска, разделённых символами новой строки. Пустая строка в качестве выражения поиска соответствует всем строкам.

ПАРАМЕТРЫ

--cached

Вместо поиска в отслеживаемых файлах в рабочем каталоге искать blob-объекты, зарегистрированные в файле индекса.

--untracked

В дополнение к поиску в отслеживаемых файлах в рабочем каталоге также искать в неотслеживаемых файлах.

--no-index

Искать файлы в текущем каталоге, который не управляется Git, или игнорируя тот факт, что текущий каталог управляется Git. Это довольно похоже на запуск обычной утилиты grep(1) с указанием её параметра -r, но с некоторыми дополнительными преимуществами, такими как использование шаблонов спецификатора пути для ограничения путей; дополнительную информацию см. в записи pathspec в gitglossary[7].

Этот параметр нельзя использовать вместе с --cached или --untracked. См. также grep.fallbackToNoIndex в разделе КОНФИГУРАЦИЯ ниже.

--no-exclude-standard

Также искать в игнорируемых файлах, не соблюдая механизм .gitignore. Полезно только с --untracked.

--exclude-standard

Не обращать внимание на игнорируемые файлы, указанные через механизм .gitignore. Полезно только при поиске файлов в текущем каталоге с --no-index.

--recurse-submodules

Рекурсивно искать в каждом активном и переключённом подмодуле в репозитории. При использовании в сочетании с параметром <дерево> префиксом всего вывода подмодулей будет имя объекта <дерево> родительского проекта. Этот параметр нельзя использовать вместе с --untracked и не действует, если указан --no-index.

-a
--text

Обрабатывать двоичные файлы, как если бы они были текстовыми.

--textconv

Соблюдать настройки фильтра textconv.

--no-textconv

Не соблюдать настройки фильтра textconv. Это значение по умолчанию.

-i
--ignore-case

Игнорировать различия в регистре между шаблонами и файлами.

-I

Не искать совпадения с шаблоном в двоичных файлах.

--max-depth <глубина>

Для каждого <спецификатора-пути>, указанного в командной строке, опускаться не более чем на <глубину> уровней каталогов. Значение -1 означает отсутствие ограничения. Этот параметр игнорируется, если <спецификатор-пути> содержит активные подстановочные знаки. Другими словами, если "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[=<когда>]

Показывать совпадения цветом. Значение должно быть always (по умолчанию), never или auto.

--no-color

Отключить подсветку совпадений, даже если файл конфигурации задаёт цветной вывод по умолчанию. То же, что и --color=never.

--break

Выводить пустую строку между совпадениями из разных файлов.

--heading

Показывать имя файла над совпадениями в этом файле вместо начала каждой показанной строки.

-p
--show-function

Показывать предыдущую строку, содержащую имя функции совпадения, если только совпадающая строка сама не является именем функции. Имя определяется так же, как git diff определяет заголовки частей патча (см. Определение пользовательского заголовка части в gitattributes[5]).

-<число>
-C <число>
--context <число>

Показывать <число> предшествующих и последующих строк и помещать строку, содержащую --, между смежными группами совпадений.

-A <число>
--after-context <число>

Показывать <число> последующих строк и помещать строку, содержащую --, между смежными группами совпадений.

-B <число>
--before-context <число>

Показывать <число> предшествующих строк и помещать строку, содержащую --, между смежными группами совпадений.

-W
--function-context

Показывать окружающий текст от предыдущей строки, содержащей имя функции, до строки перед следующим именем функции, фактически показывая всю функцию, в которой было найдено совпадение. Имена функций определяются так же, как git diff определяет заголовки частей патча (см. Определение пользовательского заголовка части в gitattributes[5]).

-m <число>
--max-count <число>

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

--threads <число>

Количество рабочих потоков grep для использования. Дополнительную информацию см. в разделах ЗАМЕЧАНИЯ О ПОТОКАХ и grep.threads в КОНФИГУРАЦИИ.

-f <файл>

Читать шаблоны из <файла>, по одному на строку.

Передача шаблона через <файл> позволяет указать шаблон поиска, содержащий \0.

Не все типы шаблонов поддерживают шаблоны, содержащие \0. Git завершится ошибкой, если данный тип шаблона не может поддерживать такой шаблон. Тип шаблона --perl-regexp при компиляции с внутренним механизмом PCRE v2 имеет самую широкую поддержку для таких типов шаблонов.

В версиях Git до 2.23.0 шаблоны, содержащие \0, молча считались фиксированными. Это никогда не было задокументировано, также были странные и недокументированные взаимодействия, например, между не-ASCII шаблонами, содержащими \0, и --ignore-case.

В будущих версиях мы, возможно, научимся поддерживать шаблоны, содержащие \0, для большего количества внутренних механизмов поиска; до тех пор мы будем завершаться критической ошибкой, когда рассматриваемый тип шаблона не поддерживает их.

-e

Следующий параметр — это шаблон. Этот параметр необходимо использовать для шаблонов, начинающихся с -, и его следует использовать в сценариях, передающих пользовательский ввод в grep. Несколько шаблонов объединяются с помощью или.

--and
--or
--not
( …​ )

Указывает, как несколько шаблонов объединяются с помощью булевых выражений. --or — оператор по умолчанию. --and имеет более высокий приоритет, чем --or. -e должен использоваться для всех шаблонов.

--all-match

При указании нескольких выражений шаблонов, объединённых с помощью --or, этот флаг указывается для ограничения совпадения файлами, которые имеют строки, соответствующие всем им.

-q
--quiet

Не выводить совпавшие строки; вместо этого завершиться со статусом 0, когда есть совпадение, и с ненулевым статусом, когда его нет.

<tree>…​

Вместо поиска в отслеживаемых файлах в рабочем каталоге искать blob-объекты в указанных деревьях.

--

Обозначает конец параметров; остальные параметры являются ограничителями <спецификатор-пути>.

<спецификатор-пути>…

Если указан, ограничивает поиск путями, соответствующими хотя бы одному шаблону. Поддерживаются как сопоставление начальных путей, так и шаблоны glob(7).

Более подробно синтаксис <спецификатора-пути> рассматривается в параграфе спецификатор пути (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 или указанием объектов деревьев) запуск с несколькими потоками может работать медленнее, чем однопоточный, если указан --textconv и выполняется слишком много текстовых преобразований. Таким образом, если в этом случае наблюдается низкая производительность, может быть желательно использовать --threads=1.

КОНФИГУРАЦИЯ

Дальнейшее содержание этого раздела, повторяет то, что может быть найдено в git-config[1]:

Warning

Missing ru/config/grep.adoc

See original version for this content.

GIT

Является частью пакета git[1]