українська мова ▾ 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) [<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>…​]

ОПИС

Шукає вказані шаблони у файлах, що відстежуються, у робочому дереві, у блоках, зареєстрованих у файлі індексу, або у блоках у вказаних об’єктах дерева. Шаблони — це списки, що містять один або кілька виразів пошуку, розділених символами нового рядка. Порожній рядок як вираз пошуку відповідає всім рядкам.

ОПЦІЇ

--cached

Замість пошуку відстежуваних файлів у робочому дереві, шукати блоби, зареєстровані в індексному файлі.

--untracked

Окрім пошуку у відстежуваних файлах робочого дерева, також можна шукати у невідстежуваних файлах.

--no-index

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

Цей параметр не можна використовувати разом з --cached або --untracked. Див. також grep.fallbackToNoIndex у розділі «КОНФІГУРАЦІЯ» нижче.

--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>]

Відкритваи відповідні файли у pager (а не у вихідних даних команди «grep»). Якщо pager — це «less» або «vi», а користувач вказав лише один шаблон, курсор у першому файлі автоматично встановлюється на перший збіг. Аргумент pager є необов’язковим; якщо він вказаний, його потрібно вказувати без пробілу. Якщо 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 обчислює заголовки фрагментів латок (див. розділ «Визначення власного заголовка фрагмента» у 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 обчислює заголовки фрагментів латок (див. «Визначення власного заголовка фрагмента» у gitattributes[5]).

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

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

--threads <num>

Кількість робочих потоків grep для використання. Див. розділи «ПРИМІТКИ ЩОДО ТРЕДІВ» та grep.threads у розділі «КОНФІГУРАЦІЯ» для отримання додаткової інформації.

-f <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>…​

Замість пошуку відстежуваних файлів у робочому дереві, шукати блоби у заданих деревах.

--

Позначає кінець опцій; решта параметрів є обмежувачами <pathspec>.

<pathspec>…​

Якщо вказано, обмежує пошук шляхами, що відповідають принаймні одному шаблону. Підтримуються як шаблони leading paths match, так і 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, що призведе до однопотокового виконання.

Під час grepping сховища обʼєктів (з --cached або наданням обʼєктів дерева), робота з кількома потоками може працювати повільніше, ніж з одним потоком, якщо задано --textconv і є забагато перетворень тексту. Таким чином, якщо в цьому випадку спостерігається низька продуктивність, може бути бажаним використання --threads=1.

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

Все, що знаходиться нижче цього рядка в цьому розділі, вибірково включено з документації git-config[1]. Вміст такий самий, як і там:

Warning

Missing uk/config/grep.adoc

See original version for this content.

GIT

Частина набору git[1]