Щоб шукати вміст фіксації (тобто фактичні рядки джерела, на відміну від повідомлень про фіксацію тощо), потрібно зробити:
git grep <regexp> $(git rev-list --all)
git rev-list --all | xargs git grep <expression>
буде працювати, якщо ви зіткнетеся з помилкою "Аргумент надто довгий".
Якщо ви хочете обмежити пошук деяким піддеревом (наприклад, "lib / util"), вам потрібно буде передати це rev-list
підкоманді, а grep
також:
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util
Це буде проглядати весь текст тексту regexp
.
Причина для проходження шляху в обох командах полягає в тому rev-list
, що повернеться список редакцій, де відбулися всі зміни lib/util
, але також вам потрібно перейти, щоб grep
він здійснював пошук лише в ньому lib/util
.
Уявіть собі наступний сценарій: він grep
може виявити те саме <regexp>
в інших файлах, які містяться в тій же редакції, що повертаються rev-list
(навіть якщо в цьому редакції не було змін цього файлу).
Ось деякі інші корисні способи пошуку вашого джерела:
Шукайте в робочому дереві текст, що відповідає регулярному вираженню регулярного вираження:
git grep <regexp>
Шукайте в робочому дереві рядки тексту, що відповідають регулярному виразу regexp1 або regexp2:
git grep -e <regexp1> [--or] -e <regexp2>
Шукайте в робочому дереві рядки тексту, що відповідають регулярним виразам regexp1 та regexp2, лише до шляхів до файлів звітів:
git grep -l -e <regexp1> --and -e <regexp2>
Шукайте в робочому дереві файли, у яких є рядки тексту, що відповідають регулярному виразу regexp1, і рядки тексту, що відповідають регулярному виразу regexp2:
git grep -l --all-match -e <regexp1> -e <regexp2>
Шукайте робоче дерево за зміненими рядками відповідності тексту:
git diff --unified=0 | grep <pattern>
Шукати у всіх редакціях для тексту, що відповідає регулярному вираженню регулярного вираження:
git grep <regexp> $(git rev-list --all)
Пошук у всіх редакціях між rev1 та rev2 для тексту, що відповідає регулярному виразі regexp:
git grep <regexp> $(git rev-list <rev1>..<rev2>)
git log -S
пікакси, тобто про вину) * [Весело з "git log --grep"] [2] (пошук повідомлень про фіксацію ) * [Fun with "git grep"] [3] [2]: gitster.livejournal.com/30195.html [3]: gitster.livejournal.com/27674.html