設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.45.1 → 2.47.0 沒有變更
-
2.45.0
04/29/24
- 2.43.1 → 2.44.2 沒有變更
-
2.43.0
11/20/23
- 2.38.1 → 2.42.3 沒有變更
-
2.38.0
10/02/22
- 2.32.1 → 2.37.7 沒有變更
-
2.32.0
06/06/21
- 2.30.1 → 2.31.8 沒有變更
-
2.30.0
12/27/20
- 2.29.1 → 2.29.3 沒有變更
-
2.29.0
10/19/20
- 2.27.1 → 2.28.1 沒有變更
-
2.27.0
06/01/20
- 2.26.1 → 2.26.3 沒有變更
-
2.26.0
03/22/20
- 2.25.2 → 2.25.5 沒有變更
-
2.25.1
02/17/20
- 2.24.1 → 2.25.0 沒有變更
-
2.24.0
11/04/19
- 2.22.1 → 2.23.4 沒有變更
-
2.22.0
06/07/19
- 2.20.1 → 2.21.4 沒有變更
-
2.20.0
12/09/18
- 2.19.1 → 2.19.6 沒有變更
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 沒有變更
-
2.18.0
06/21/18
- 2.16.6 → 2.17.6 沒有變更
- 2.15.4 沒有變更
-
2.14.6
12/06/19
- 2.13.7 沒有變更
-
2.12.5
09/22/17
- 2.10.5 → 2.11.4 沒有變更
-
2.9.5
07/30/17
-
2.8.6
07/30/17
- 2.7.6 沒有變更
-
2.6.7
05/05/17
- 2.2.3 → 2.5.6 沒有變更
-
2.1.4
12/17/14
-
2.0.5
12/17/14
概要
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
-
不要在工作樹中搜尋追蹤的檔案,而是在索引檔中搜尋註冊的 blobs。
- --untracked
-
除了在工作樹中搜尋追蹤的檔案外,也搜尋未追蹤的檔案。
- --no-index
-
搜尋目前目錄中未由 Git 管理的檔案,或忽略目前目錄由 Git 管理的事實。這與執行一般
grep(1)
公用程式並指定其-r
選項非常相似,但具有一些額外的好處,例如使用路徑規格模式來限制路徑;有關更多資訊,請參閱 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 為基礎的位元組偏移量作為前綴。
- -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
計算 patch hunk 標頭的方式相同(請參閱 gitattributes[5] 中的「定義自訂 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
計算 patch hunk 標頭的方式相同(請參閱 gitattributes[5] 中的「定義自訂 hunk-header」)。 - -m <num>
- --max-count <num>
-
限制每個檔案的匹配數量。當使用
-v
或--invert-match
選項時,搜尋會在指定的非匹配數量後停止。值為 -1 將返回無限的結果(預設)。值為 0 將立即退出並返回非零狀態。 - --threads <num>
-
要使用的
grep
工作執行緒數。有關詳細資訊,請參閱「關於執行緒的注意事項」和「組態」中的grep.threads
。 - -f <file>
-
從 <file> 中讀取模式,每行一個。
透過 <file> 傳遞模式允許提供包含 \0 的搜尋模式。
並非所有模式類型都支援包含 \0 的模式。如果給定的模式類型不支援此類模式,Git 將會出錯。針對 PCRE v2 後端編譯的
--perl-regexp
模式類型對這些類型的模式具有最廣泛的支援。在 2.23.0 之前的 Git 版本中,包含 \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」條目。
範例
-
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
設定),強制單執行緒執行。
當 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,則當在 git 儲存庫外部執行
git grep
時,會回退到git grep --no-index
。預設為 false。
GIT
屬於 git[1] 套件的一部分