設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.45.1 → 2.52.0 無更改
-
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 管理。這非常類似於使用 regular
grep(1)實用程式及其-r選項,但具有一些額外的優點,例如使用路徑說明符模式來限制路徑;有關更多資訊,請參閱 gitglossary[7] 中的pathspec 條目。此選項不能與
--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>]
-
在分頁器中開啟匹配的檔案(而不是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
-
顯示包含匹配項函式名的前一行,除非匹配行本身就是一個函式名。函式名的確定方式與
gitdiff確定補丁塊標題的方式相同(請參閱 gitattributes[5] 中的定義自定義塊標題)。 - -<num>
- -C <num>
- --context <num>
-
顯示 <num> 行的上下文(前置和後置),並在連續匹配組之間放置一個包含
--的行。 - -A <num>
- --after-context <num>
-
顯示 <num> 行的後置上下文,並在連續匹配組之間放置一個包含
--的行。 - -B <num>
- --before-context <num>
-
顯示 <num> 行的前置上下文,並在連續匹配組之間放置一個包含
--的行。 - -W
- --function-context
-
顯示從包含函式名的前一行到下一個函式名之前一行的周圍文字,有效地顯示找到匹配項的整個函式。函式名的確定方式與
gitdiff確定補丁塊標題的方式相同(請參閱 gitattributes[5] 中的定義自定義塊標題)。 - -m <num>
- --max-count <num>
-
限制每個檔案中的匹配項數量。當使用
-v或--invert-match選項時,搜尋在指定數量的非匹配項後停止。-1 的值將返回無限制的結果(預設)。0 的值將立即以非零狀態退出。 - --threads <num>
-
使用的
grep工作執行緒數。請參閱關於執行緒的說明和配置中的grep.threads以獲取更多資訊。 - -f <file>
-
從 <file> 讀取模式,每行一個。
透過 <file> 傳遞模式允許提供包含 \0 的搜尋模式。
並非所有模式型別都支援包含 \0 的模式。如果給定的模式型別不支援此類模式,Git 將會報錯。
--perl-regexp模式型別與 PCRE v2 後端編譯時,對此類模式的支援最廣泛。在 Git 2.23.0 之前的版本中,包含 \0 的模式會被靜默地視為固定字串。這從未被記錄,並且例如,包含 \0 的非 ASCII 模式與
--ignore-case之間也存在奇怪且未被記錄的互動。在未來的版本中,我們可能會為更多搜尋後端新增對包含 \0 的模式的支援,在此之前,當相關的模式型別不支援它們時,我們將退出。
- -e
-
下一個引數是模式。此選項必須用於以
-開頭的模式,並且應該在指令碼將使用者輸入傳遞給 grep 時使用。多個模式透過或組合。 - --and
- --or
- --not
- ( … )
-
指定如何使用布林表示式組合多個模式。
--or是預設運算子。--and的優先順序高於--or。-e必須用於所有模式。 - --all-match
-
在提供用
--or組合的多個模式表示式時,指定此標誌以限制匹配到那些具有匹配所有這些模式的行的檔案。 - -q
- --quiet
-
不輸出匹配的行;相反,當存在匹配時以狀態 0 退出,當不存在匹配時以非零狀態退出。
- <tree>…
-
不搜尋工作樹中的跟蹤檔案,而是搜尋給定樹中的 blob。
- --
-
表示選項的結束;其餘引數是 <pathspec> 限制符。
- <pathspec>…
-
如果給出,則將搜尋限制在至少匹配一個模式的路徑。同時支援前導路徑匹配和 glob(7) 模式。
有關 <pathspec> 語法的更多詳細資訊,請參閱 gitglossary[7] 中的pathspec 條目。
示例
gitgreptime_t'--*.[ch]-
在工作目錄及其子目錄中的所有跟蹤的 .c 和 .h 檔案中查詢
time_t。 - git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)
-
查詢包含
#define並且還包含MAX_PATH或PATH_MAX的行。 gitgrep--all-match-eNODE-eUnexpected-
查詢在包含匹配兩個模式的行的檔案中,包含
NODE或Unexpected的行。 gitgrepsolution--:^Documentation-
查詢
solution,但不包括Documentation目錄中的檔案。
關於執行緒的說明
當使用 --open-files-in-pager 選項時,將忽略 --threads 選項(以及 grep.threads 配置),強制執行單執行緒。
當對物件儲存進行 grepping 時(使用 --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,則在
gitgrep在 git 倉庫外執行時,會回退到gitgrep--no-index。預設為 false。