設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.45.1 → 2.50.1 無更改
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.4 無更改
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 無更改
-
2.38.0
2022-10-02
- 2.32.1 → 2.37.7 無更改
-
2.32.0
2021-06-06
- 2.30.1 → 2.31.8 無更改
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 無更改
-
2.29.0
2020-10-19
- 2.27.1 → 2.28.1 無變更
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 無更改
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 無更改
-
2.25.1
2020-02-17
- 2.24.1 → 2.25.0 無更改
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 無更改
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 無更改
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 無更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 無更改
-
2.18.0
2018-06-21
- 2.16.6 → 2.17.6 無更改
- 2.15.4 無更改
-
2.14.6
2019-12-06
- 2.13.7 無更改
-
2.12.5
2017-09-22
- 2.10.5 → 2.11.4 無更改
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 無更改
-
2.6.7
2017-05-05
- 2.2.3 → 2.5.6 無更改
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
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
-
不搜尋工作樹中已跟蹤的檔案,而是搜尋索引檔案中註冊的 blob。
- --untracked
-
除了在工作樹中已跟蹤的檔案中搜索外,還搜尋未跟蹤的檔案。
- --no-index
-
在當前目錄中搜索不由 Git 管理的檔案,或忽略當前目錄由 Git 管理。這與執行常規的
grep
(1
) 工具並指定其-r
選項非常相似,但有一些額外的好處,例如使用 pathspec 模式來限制路徑;有關更多資訊,請參閱 gitglossary[7] 中的 pathspec 條目。此選項不能與
--cached
或--untracked
一起使用。另請參閱下面的 CONFIGURATION 中的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-indexed 位元組偏移量作為字首。
- -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
,將使用預設分頁器(參見 git-config[1] 中的core.pager
)。 - -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] 中 Defining a custom hunk-header)。 - -<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] 中 Defining a custom hunk-header)。 - -m <num>
- --max-count <num>
-
限制每個檔案的匹配數量。當使用
-v
或--invert-match
選項時,搜尋將在指定數量的非匹配項之後停止。值為 -1 將返回無限結果(預設)。值為 0 將立即以非零狀態退出。 - --threads <num>
-
要使用的
grep
工作執行緒數。有關更多資訊,請參閱 NOTES ON THREADS 和 CONFIGURATION 中的grep.threads
。 - -f <file>
-
從 <file> 讀取模式,每行一個。
透過 <file> 傳遞模式允許提供包含 \0 的搜尋模式。
並非所有模式型別都支援包含 \0 的模式。如果給定的模式型別不支援此類模式,Git 將報錯。針對 PCRE v2 後端編譯時,
--perl-regexp
模式型別對此類模式的支援最廣泛。在 Git 2.23.0 之前的版本中,包含 \0 的模式會被默默地視為固定字串。這從未被記錄,例如,包含 \0 的非 ASCII 模式與
--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> 語法的更多詳細資訊,請參閱 gitglossary[7] 中的 pathspec 條目。
示例
git
grep
time_t'
--
*.
[ch
]-
在工作目錄及其子目錄中所有已跟蹤的 .c 和 .h 檔案中查詢
time_t
。 - 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
中的檔案。
關於執行緒的注意事項
當使用 --open-files-in-pager
時,--threads
選項(以及 grep.threads
配置)將被忽略,強制執行單執行緒。
當在物件儲存中進行 grep(使用 --cached
或給定樹物件)時,如果給定 --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 倉庫外部執行
git
grep
時,回退到git
grep
--no-index
。預設為 false。