設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢視與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
-
2.47.0
10/06/24
- 2.46.1 → 2.46.2 無變更
-
2.46.0
07/29/24
- 2.45.2 無變更
-
2.45.1
04/29/24
-
2.45.0
04/29/24
- 2.44.2 無變更
-
2.44.1
04/19/24
-
2.44.0
02/23/24
- 2.43.5 無變更
-
2.43.4
04/19/24
- 2.43.2 → 2.43.3 無變更
-
2.43.1
02/09/24
-
2.43.0
11/20/23
- 2.42.3 無變更
-
2.42.2
04/19/24
-
2.42.1
11/02/23
-
2.42.0
08/21/23
- 2.41.2 無變更
-
2.41.1
04/19/24
-
2.41.0
06/01/23
- 2.40.3 無變更
-
2.40.2
04/19/24
- 2.40.1 無變更
- 2.40.0 無變更
- 2.39.5 無變更
-
2.39.4
04/19/24
- 2.39.1 → 2.39.3 無變更
-
2.39.0
12/12/22
- 2.38.3 → 2.38.5 無變更
-
2.38.2
12/11/22
- 2.38.1 無變更
-
2.38.0
10/02/22
- 2.37.3 → 2.37.7 無變更
-
2.37.2
08/11/22
- 2.37.1 無變更
-
2.37.0
06/27/22
- 2.36.1 → 2.36.6 無變更
-
2.36.0
04/18/22
- 2.35.1 → 2.35.8 無變更
-
2.35.0
01/24/22
- 2.34.1 → 2.34.8 無變更
-
2.34.0
11/15/21
- 2.33.3 → 2.33.8 無變更
-
2.33.2
03/23/22
-
2.33.1
10/12/21
- 2.32.1 → 2.33.0 無變更
-
2.32.0
06/06/21
- 2.31.1 → 2.31.8 無變更
-
2.31.0
03/15/21
- 2.30.1 → 2.30.9 無變更
-
2.30.0
12/27/20
- 2.29.1 → 2.29.3 無變更
-
2.29.0
10/19/20
- 2.28.1 無變更
-
2.28.0
07/27/20
- 2.27.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.25.0
01/13/20
- 2.23.1 → 2.24.4 無變更
-
2.23.0
08/16/19
- 2.22.2 → 2.22.5 無變更
-
2.22.1
08/11/19
-
2.22.0
06/07/19
- 2.20.1 → 2.21.4 無變更
-
2.20.0
12/09/18
- 2.19.3 → 2.19.6 無變更
-
2.19.2
11/21/18
- 2.19.1 無變更
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 無變更
-
2.18.0
06/21/18
- 2.17.1 → 2.17.6 無變更
-
2.17.0
04/02/18
-
2.16.6
12/06/19
-
2.15.4
12/06/19
-
2.14.6
12/06/19
- 2.13.7 無變更
-
2.12.5
09/22/17
-
2.11.4
09/22/17
-
2.10.5
09/22/17
-
2.9.5
07/30/17
-
2.8.6
07/30/17
-
2.7.6
07/30/17
-
2.6.7
05/05/17
-
2.5.6
05/05/17
-
2.4.12
05/05/17
-
2.3.10
09/28/15
-
2.2.3
09/04/15
-
2.1.4
12/17/14
-
2.0.5
12/17/14
概要
git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch] [--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>] <command> [<args>]
描述
Git 是一個快速、可擴展的分散式版本控制系統,具有異常豐富的命令集,可提供高階操作和對內部的完全存取權。
請參閱 gittutorial[7] 以開始使用,然後參閱 giteveryday[7] 以了解有用的最少命令集。 Git 使用者手冊 有更深入的介紹。
當您掌握基本概念後,您可以返回此頁面以了解 Git 提供的命令。您可以使用 "git help command" 來了解更多關於個別 Git 命令的資訊。 gitcli[7] 手冊頁面提供了命令列命令語法的概述。
可以在 https://git.github.io/htmldocs/git.html 或 https://git.dev.org.tw/docs 中檢視格式化且有超連結的最新 Git 文件副本。
選項
- -v
- --version
-
印出 git 程式所來自的 Git 套件版本。
此選項會在內部轉換為
git version ...
,並接受與 git-version[1] 命令相同的選項。如果也給定--help
,則優先於--version
。 - -h
- --help
-
印出概要和最常用命令的清單。如果給定選項
--all
或-a
,則會印出所有可用的命令。如果命名了 Git 命令,此選項會顯示該命令的手冊頁面。還有其他選項可用於控制手冊頁面的顯示方式。請參閱 git-help[1] 以取得更多資訊,因為
git --help ...
會在內部轉換為git help ...
。 - -C <path>
-
如同在 <path> 而非目前工作目錄中啟動 git 一樣執行。當給定多個
-C
選項時,每個後續的非絕對-C <path>
都會相對於前一個-C <path>
進行解釋。如果存在 <path> 但為空,例如-C ""
,則目前工作目錄保持不變。此選項會影響期望路徑名稱的選項,例如
--git-dir
和--work-tree
,因為它們對路徑名稱的解釋將相對於由-C
選項導致的工作目錄進行。例如,以下調用是等效的git --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
- -c <name>=<value>
-
將配置參數傳遞給命令。給定的值將覆寫來自設定檔的值。<name> 的格式應與 git config 列出的格式相同(子金鑰以點分隔)。
請注意,允許省略
git -c foo.bar ...
中的=
,並將foo.bar
設定為布林值 true(就像在設定檔中[foo]bar
一樣)。包含等號但值為空(例如git -c foo.bar= ...
)會將foo.bar
設定為空字串,git config --type=bool
會將其轉換為false
。 - --config-env=<name>=<envvar>
-
與
-c <name>=<value>
類似,為配置變數 <name> 提供一個值,其中 <envvar> 是從中擷取值的環境變數的名稱。與-c
不同,沒有直接將值設定為空字串的快捷方式,而是必須將環境變數本身設定為空字串。如果環境中不存在<envvar>
,則會發生錯誤。<envvar>
不得包含等號,以避免與包含等號的<name>
產生歧義。這在您想要將臨時配置選項傳遞給 git 的情況下非常有用,但在作業系統上執行此操作時,其他程序可能會讀取您的命令列(例如
/proc/self/cmdline
),但不會讀取您的環境(例如/proc/self/environ
)。該行為是 Linux 上的預設行為,但在您的系統上可能不是。請注意,這可能會為變數(例如
http.extraHeader
)增加安全性,其中敏感資訊是值的一部分,但不會為變數(例如url.<base>.insteadOf
)增加安全性,其中敏感資訊可能是金鑰的一部分。 - --exec-path[=<path>]
-
核心 Git 程式安裝的路徑。也可以透過設定 GIT_EXEC_PATH 環境變數來控制。如果未給定路徑,git 將印出目前設定,然後結束。
- --html-path
-
印出 Git HTML 文件安裝的路徑,不帶結尾斜線,然後結束。
- --man-path
-
印出此版本 Git 的手冊頁面的 manpath (請參閱
man(1)
),然後結束。 - --info-path
-
印出安裝此版本 Git 的 Info 檔案的路徑,然後結束。
- -p
- --paginate
-
如果標準輸出是終端機,則將所有輸出導向 less(如果已設定,則導向 $PAGER)。這會覆寫
pager.<cmd>
設定選項(請參閱下面的「設定機制」章節)。 - -P
- --no-pager
-
不要將 Git 輸出導向呼叫器。
- --git-dir=<path>
-
設定存放庫(".git" 目錄)的路徑。也可以透過設定
GIT_DIR
環境變數來控制。它可以是絕對路徑或相對於目前工作目錄的路徑。使用此選項(或
GIT_DIR
環境變數)指定 ".git" 目錄的位置會關閉存放庫探索,該探索會嘗試尋找具有 ".git" 子目錄的目錄(這就是如何探索存放庫和工作樹的最上層),並告訴 Git 您位於工作樹的最上層。如果您不在工作樹的最上層目錄中,您應該使用--work-tree=<path>
選項(或GIT_WORK_TREE
環境變數)告訴 Git 工作樹的最上層在哪裡。如果您只是想如同在
<path>
中啟動一樣執行 git,則請使用git -C <path>
。 - --work-tree=<path>
-
設定工作樹的路徑。它可以是絕對路徑或相對於目前工作目錄的路徑。也可以透過設定 GIT_WORK_TREE 環境變數和 core.worktree 設定變數來控制(如需更詳細的討論,請參閱 git-config[1] 中的 core.worktree)。
- --namespace=<path>
-
設定 Git 命名空間。如需更多詳細資訊,請參閱 gitnamespaces[7]。與設定
GIT_NAMESPACE
環境變數相同。 - --bare
-
將存放庫視為裸存放庫。如果未設定 GIT_DIR 環境,則會將其設定為目前工作目錄。
- --no-replace-objects
-
不要使用取代參照來取代 Git 物件。這相當於匯出具有任何值的
GIT_NO_REPLACE_OBJECTS
環境變數。如需更多資訊,請參閱 git-replace[1]。 - --no-lazy-fetch
-
不要按需從約定遠端擷取遺失的物件。與
git cat-file -e <object>
一起使用,以查看物件是否在本地可用。這相當於將GIT_NO_LAZY_FETCH
環境變數設定為1
。 - --no-optional-locks
-
不要執行需要鎖定的選用操作。這相當於將
GIT_OPTIONAL_LOCKS
設定為0
。 - --no-advice
-
停用所有建議提示的顯示。
- --literal-pathspecs
-
將路徑規格視為字面值(即不使用 globbing,不使用路徑規格魔法)。這相當於將
GIT_LITERAL_PATHSPECS
環境變數設定為1
。 - --glob-pathspecs
-
為所有路徑規格添加 "glob" 魔法。這相當於將
GIT_GLOB_PATHSPECS
環境變數設定為1
。可以使用路徑規格魔法 ":(literal)" 來停用個別路徑規格的 globbing。 - --noglob-pathspecs
-
為所有路徑規格添加 "literal" 魔法。這相當於將
GIT_NOGLOB_PATHSPECS
環境變數設定為1
。可以使用路徑規格魔法 ":(glob)" 來啟用個別路徑規格的 globbing。 - --icase-pathspecs
-
為所有路徑規格添加 "icase" 魔法。這相當於將
GIT_ICASE_PATHSPECS
環境變數設定為1
。 - --list-cmds=<group>[,<group>…]
-
依群組列出指令。這是一個內部/實驗性選項,未來可能會變更或移除。支援的群組有:builtins、parseopt(使用 parse-options 的內建指令)、main(libexec 目錄中的所有指令)、others(
$PATH
中所有具有 git- 前綴的其他指令)、list-<category>(請參閱 command-list.txt 中的類別)、nohelpers(排除輔助指令)、alias 和 config(從組態變數 completion.commands 檢索指令清單)。 - --attr-source=<tree-ish>
-
從 <tree-ish> 而非工作目錄讀取 gitattributes。請參閱 gitattributes[5]。這相當於設定
GIT_ATTR_SOURCE
環境變數。
高階指令(瓷器)
我們將瓷器指令分為主要指令和一些輔助使用者工具。
主要瓷器指令
- git-add[1]
-
將檔案內容新增到索引
- git-am[1]
-
從信箱套用一系列修補程式
- git-archive[1]
-
從具名樹建立檔案的封存
- git-bisect[1]
-
使用二元搜尋來尋找引入錯誤的提交
- git-branch[1]
-
列出、建立或刪除分支
- git-bundle[1]
-
透過封存移動物件和參考
- git-checkout[1]
-
切換分支或還原工作目錄檔案
- git-cherry-pick[1]
-
套用一些現有提交所引入的變更
- git-citool[1]
-
git-commit 的圖形替代方案
- git-clean[1]
-
從工作目錄移除未追蹤的檔案
- git-clone[1]
-
將儲存庫複製到新目錄
- git-commit[1]
-
記錄對儲存庫的變更
- git-describe[1]
-
根據可用的參考為物件提供人類可讀的名稱
- git-diff[1]
-
顯示提交之間、提交和工作目錄之間的變更等等
- git-fetch[1]
-
從另一個儲存庫下載物件和參考
- git-format-patch[1]
-
準備用於電子郵件提交的修補程式
- git-gc[1]
-
清除不必要的文件並最佳化本機儲存庫
- git-grep[1]
-
列印符合模式的行
- git-gui[1]
-
Git 的可攜式圖形介面
- git-init[1]
-
建立空的 Git 儲存庫或重新初始化現有的儲存庫
- git-log[1]
-
顯示提交記錄
- git-maintenance[1]
-
執行最佳化 Git 儲存庫資料的任務
- git-merge[1]
-
將兩個或多個開發歷程合併在一起
- git-mv[1]
-
移動或重新命名檔案、目錄或符號連結
- git-notes[1]
-
新增或檢查物件附註
- git-pull[1]
-
從另一個儲存庫或本機分支提取並整合
- git-push[1]
-
更新遠端參考以及相關聯的物件
- git-range-diff[1]
-
比較兩個提交範圍(例如,分支的兩個版本)
- git-rebase[1]
-
在另一個基準頂端重新套用提交
- git-reset[1]
-
將目前的 HEAD 重設為指定的狀態
- git-restore[1]
-
還原工作目錄檔案
- git-revert[1]
-
還原一些現有的提交
- git-rm[1]
-
從工作目錄和索引中移除檔案
- git-shortlog[1]
-
摘要 git log 輸出
- git-show[1]
-
顯示各種物件類型
- git-sparse-checkout[1]
-
將您的工作目錄縮減為已追蹤檔案的子集
- git-stash[1]
-
隱藏髒工作目錄中的變更
- git-status[1]
-
顯示工作目錄狀態
- git-submodule[1]
-
初始化、更新或檢查子模組
- git-switch[1]
-
切換分支
- git-tag[1]
-
建立、列出、刪除或驗證使用 GPG 簽署的標籤物件
- git-worktree[1]
-
管理多個工作目錄
- gitk[1]
-
Git 儲存庫瀏覽器
- scalar[1]
-
用於管理大型 Git 儲存庫的工具
輔助指令
操作器
- git-config[1]
-
取得和設定儲存庫或全域選項
- git-fast-export[1]
-
Git 資料匯出器
- git-fast-import[1]
-
用於快速 Git 資料匯入器的後端
- git-filter-branch[1]
-
重寫分支
- git-mergetool[1]
-
執行合併衝突解決工具以解決合併衝突
- git-pack-refs[1]
-
封裝標頭和標籤以提高儲存庫存取效率
- git-prune[1]
-
從物件資料庫中修剪所有無法存取的物件
- git-reflog[1]
-
管理參考日誌資訊
- git-refs[1]
-
對參考的低階存取
- git-remote[1]
-
管理追蹤的儲存庫集合
- git-repack[1]
-
在儲存庫中封裝未封裝的物件
- git-replace[1]
-
建立、列出、刪除用於取代物件的參照
查詢工具
- git-annotate[1]
-
用提交資訊標註檔案行
- git-blame[1]
-
顯示檔案每一行最後修改的版本和作者
- git-bugreport[1]
-
收集資訊以供使用者提交錯誤報告
- git-count-objects[1]
-
計算解包的物件數量及其磁碟消耗
- git-diagnose[1]
-
產生診斷資訊的 zip 壓縮檔
- git-difftool[1]
-
使用常見的差異工具顯示變更
- git-fsck[1]
-
驗證資料庫中物件的連線性和有效性
- git-help[1]
-
顯示有關 Git 的說明資訊
- git-instaweb[1]
-
在 gitweb 中立即瀏覽您的工作儲存庫
- git-merge-tree[1]
-
執行合併而不觸及索引或工作樹
- git-rerere[1]
-
重複使用已記錄的衝突合併解決方案
- git-show-branch[1]
-
顯示分支及其提交
- git-verify-commit[1]
-
檢查提交的 GPG 簽名
- git-verify-tag[1]
-
檢查標籤的 GPG 簽名
- git-version[1]
-
顯示有關 Git 的版本資訊
- git-whatchanged[1]
-
顯示日誌以及每次提交引入的差異
- gitweb[1]
-
Git 網頁介面(Git 儲存庫的網頁前端)
與他人互動
這些命令用於與外部 SCM 互動,並透過電子郵件中的修補程式與其他人互動。
- git-archimport[1]
-
將 GNU Arch 儲存庫匯入 Git
- git-cvsexportcommit[1]
-
將單個提交匯出到 CVS 簽出
- git-cvsimport[1]
-
從另一個人們不喜歡的 SCM 中拯救您的資料
- git-cvsserver[1]
-
Git 的 CVS 伺服器模擬器
- git-imap-send[1]
-
將來自 stdin 的修補程式集合傳送到 IMAP 資料夾
- git-p4[1]
-
從 Perforce 儲存庫匯入和提交
- git-quiltimport[1]
-
將 quilt 修補程式集套用到目前的分支
- git-request-pull[1]
-
產生待處理變更的摘要
- git-send-email[1]
-
將修補程式集合以電子郵件形式傳送
- git-svn[1]
-
Subversion 儲存庫和 Git 之間的雙向操作
重設、還原和復原
有三個名稱相似的命令:git reset
、git restore
和 git revert
。
-
git-revert[1] 是關於建立一個新的提交,該提交會復原其他提交所做的變更。
-
git-restore[1] 是關於從索引或另一個提交還原工作樹中的檔案。此命令不會更新您的分支。該命令還可用於從另一個提交還原索引中的檔案。
-
git-reset[1] 是關於更新您的分支,移動尖端以從分支新增或移除提交。此操作會變更提交歷史記錄。
git reset
也可用於還原索引,與git restore
重疊。
低階命令(管道)
雖然 Git 包含自己的瓷器層,但其低階命令足以支援開發替代瓷器。此類瓷器的開發人員可以先閱讀有關 git-update-index[1] 和 git-read-tree[1] 的內容。
這些低階命令的介面(輸入、輸出、選項集和語意)的穩定性遠高於瓷器層級命令,因為這些命令主要用於腳本化使用。另一方面,為了改善最終使用者體驗,瓷器命令的介面可能會發生變更。
以下說明將低階命令分為操作物件(在儲存庫、索引和工作樹中)的命令、查詢和比較物件的命令,以及在儲存庫之間移動物件和參照的命令。
操作命令
- git-apply[1]
-
將修補程式套用到檔案和/或索引
- git-checkout-index[1]
-
將檔案從索引複製到工作樹
- git-commit-graph[1]
-
寫入和驗證 Git 提交圖檔案
- git-commit-tree[1]
-
建立新的提交物件
- git-hash-object[1]
-
計算物件 ID,並選擇性地從檔案建立物件
- git-index-pack[1]
-
為現有的壓縮封存建立壓縮索引檔案
- git-merge-file[1]
-
執行三向檔案合併
- git-merge-index[1]
-
對需要合併的檔案執行合併
- git-mktag[1]
-
建立具有額外驗證的標籤物件
- git-mktree[1]
-
從 ls-tree 格式化文字建立樹狀物件
- git-multi-pack-index[1]
-
寫入和驗證多封裝索引
- git-pack-objects[1]
-
建立物件的壓縮封存
- git-prune-packed[1]
-
移除已在壓縮檔案中的額外物件
- git-read-tree[1]
-
將樹狀資訊讀取到索引中
- git-replay[1]
-
實驗性:在新的基礎上重播提交,也適用於裸儲存庫
- git-symbolic-ref[1]
-
讀取、修改和刪除符號參照
- git-unpack-objects[1]
-
從壓縮封存解壓縮物件
- git-update-index[1]
-
將工作樹中的檔案內容註冊到索引
- git-update-ref[1]
-
安全地更新參照中儲存的物件名稱
- git-write-tree[1]
-
從目前索引建立樹狀物件
查詢命令
- git-cat-file[1]
-
提供儲存庫物件的內容或詳細資料
- git-cherry[1]
-
尋找尚未套用到上游的提交
- git-diff-files[1]
-
比較工作樹和索引中的檔案
- git-diff-index[1]
-
將樹狀結構與工作樹或索引進行比較
- git-diff-tree[1]
-
比較透過兩個樹狀物件找到的 blob 的內容和模式
- git-for-each-ref[1]
-
輸出每個參照的資訊
- git-for-each-repo[1]
-
在一系列儲存庫上執行 Git 命令
- git-get-tar-commit-id[1]
-
從使用 git-archive 建立的封存中擷取提交 ID
- git-ls-files[1]
-
顯示索引和工作樹中檔案的相關資訊
- git-ls-remote[1]
-
列出遠端儲存庫中的參照
- git-ls-tree[1]
-
列出樹狀物件的內容
- git-merge-base[1]
-
為合併尋找盡可能好的共同祖先
- git-name-rev[1]
-
為給定的修訂版本尋找符號名稱
- git-pack-redundant[1]
-
尋找多餘的壓縮檔案
- git-rev-list[1]
-
以反向時間順序列出 commit 物件
- git-rev-parse[1]
-
挑選並處理參數
- git-show-index[1]
-
顯示打包的封存索引
- git-show-ref[1]
-
列出本地儲存庫中的參考
- git-unpack-file[1]
-
建立一個包含 blob 內容的暫存檔
- git-var[1]
-
顯示 Git 邏輯變數
- git-verify-pack[1]
-
驗證打包的 Git 封存檔
一般來說,查詢命令不會更動工作樹中的檔案。
同步儲存庫
- git-daemon[1]
-
一個非常簡單的 Git 儲存庫伺服器
- git-fetch-pack[1]
-
從另一個儲存庫接收遺失的物件
- git-http-backend[1]
-
透過 HTTP 實作 Git 的伺服器端
- git-send-pack[1]
-
透過 Git 協定將物件推送到另一個儲存庫
- git-update-server-info[1]
-
更新輔助資訊檔案以協助「笨」伺服器
以下是由上述命令使用的輔助命令;終端使用者通常不會直接使用它們。
- git-http-fetch[1]
-
透過 HTTP 從遠端 Git 儲存庫下載
- git-http-push[1]
-
透過 HTTP/DAV 將物件推送到另一個儲存庫
- git-receive-pack[1]
-
接收被推送至儲存庫的內容
- git-shell[1]
-
用於僅限 Git 的 SSH 存取的受限登入 shell
- git-upload-archive[1]
-
將封存檔送回 git-archive
- git-upload-pack[1]
-
將打包的物件送回 git-fetch-pack
內部輔助命令
這些是由其他命令使用的內部輔助命令;終端使用者通常不會直接使用它們。
- git-check-attr[1]
-
顯示 gitattributes 資訊
- git-check-ignore[1]
-
除錯 gitignore/exclude 檔案
- git-check-mailmap[1]
-
顯示聯絡人的標準名稱和電子郵件地址
- git-check-ref-format[1]
-
確保參考名稱格式正確
- git-column[1]
-
以欄位顯示資料
- git-credential[1]
-
擷取並儲存使用者憑證
- git-credential-cache[1]
-
暫時將密碼儲存在記憶體中的輔助程式
- git-credential-store[1]
-
將憑證儲存在磁碟上的輔助程式
- git-fmt-merge-msg[1]
-
產生合併 commit 訊息
- git-hook[1]
-
執行 git hook
- git-interpret-trailers[1]
-
在 commit 訊息中新增或剖析結構化資訊
- git-mailinfo[1]
-
從單一電子郵件訊息中擷取修補程式和作者資訊
- git-mailsplit[1]
-
簡單的 UNIX mbox 分割程式
- git-merge-one-file[1]
-
與 git-merge-index 搭配使用的標準輔助程式
- git-patch-id[1]
-
計算修補程式的唯一 ID
- git-sh-i18n[1]
-
Git 用於 shell 指令碼的 i18n 設定程式碼
- git-sh-setup[1]
-
常見的 Git shell 指令碼設定程式碼
- git-stripspace[1]
-
移除不必要的空白
指南
以下文件頁面是關於 Git 概念的指南。
- gitcore-tutorial[7]
-
給開發人員的 Git 核心教學
- gitcredentials[7]
-
向 Git 提供使用者名稱和密碼
- gitcvs-migration[7]
-
給 CVS 使用者的 Git
- gitdiffcore[7]
-
調整 diff 輸出
- giteveryday[7]
-
每日 Git 的一組有用的最少命令
- gitfaq[7]
-
關於使用 Git 的常見問題
- gitglossary[7]
-
Git 詞彙表
- gitnamespaces[7]
-
Git 命名空間
- gitremote-helpers[7]
-
與遠端儲存庫互動的輔助程式
- gitsubmodules[7]
-
在另一個儲存庫內掛載一個儲存庫
- gittutorial[7]
-
Git 的教學簡介
- gittutorial-2[7]
-
Git 的教學簡介:第二部分
- gitworkflows[7]
-
Git 建議工作流程概觀
儲存庫、命令和檔案介面
此文件討論使用者預期直接互動的儲存庫和命令介面。有關標準的更多詳細資訊,請參閱 git-help[1] 中的 --user-formats
。
- gitattributes[5]
-
定義每個路徑的屬性
- gitcli[7]
-
Git 命令列介面和慣例
- githooks[5]
-
Git 使用的 hook
- gitignore[5]
-
指定要忽略的有意不追蹤檔案
- gitmailmap[5]
-
對應作者/提交者姓名和/或電子郵件地址
- gitmodules[5]
-
定義子模組屬性
- gitrepository-layout[5]
-
Git 儲存庫配置
- gitrevisions[7]
-
為 Git 指定修訂版本和範圍
檔案格式、協定和其他開發人員介面
此文件討論檔案格式、網路協定和其他 git 開發人員介面。請參閱 git-help[1] 中的 --developer-interfaces
。
- gitformat-bundle[5]
-
bundle 檔案格式
- gitformat-chunk[5]
-
基於區塊的檔案格式
- gitformat-commit-graph[5]
-
Git commit 圖格式
- gitformat-index[5]
-
Git 索引格式
- gitformat-pack[5]
-
Git pack 格式
- gitformat-signature[5]
-
Git 加密簽章格式
- gitprotocol-capabilities[5]
-
協定 v0 和 v1 功能
- gitprotocol-common[5]
-
各種協定的共同點
- gitprotocol-http[5]
-
基於 HTTP 的 Git 協定
- gitprotocol-pack[5]
-
pack 如何在網路上傳輸
- gitprotocol-v2[5]
-
Git 網路協定,版本 2
組態機制
Git 使用簡單的文字格式來儲存每個儲存庫和每個使用者的自訂設定。這樣的組態檔案可能如下所示
# # A '#' or ';' character indicates a comment. # ; core variables [core] ; Don't trust file modes filemode = false ; user identity [user] name = "Junio C Hamano" email = "gitster@pobox.com"
各種命令會從組態檔案讀取並據此調整其操作。有關組態機制的列表和更多詳細資訊,請參閱 git-config[1]。
識別碼術語
- <object>
-
表示任何類型物件的物件名稱。
- <blob>
-
表示 blob 物件名稱。
- <tree>
-
表示 tree 物件名稱。
- <commit>
-
表示 commit 物件名稱。
- <tree-ish>
-
表示 tree、commit 或 tag 物件名稱。採用 <tree-ish> 引數的命令最終想要對 <tree> 物件進行操作,但會自動取消對指向 <tree> 的 <commit> 和 <tag> 物件的參考。
- <commit-ish>
-
表示 commit 或 tag 物件名稱。採用 <commit-ish> 引數的命令最終想要對 <commit> 物件進行操作,但會自動取消對指向 <commit> 的 <tag> 物件的參考。
- <type>
-
表示需要物件類型。目前為以下其中一項:
blob
、tree
、commit
或tag
。 - <file>
-
表示檔名 - 幾乎總是相對於
GIT_INDEX_FILE
描述的樹狀結構的根目錄。
符號識別符
任何接受 <object> 的 Git 命令也可以使用下列符號表示法
如需更完整的物件名稱表示方式列表,請參閱 gitrevisions[7] 中的「SPECIFYING REVISIONS」章節。
檔案/目錄結構
請參閱 gitrepository-layout[5] 文件。
閱讀 githooks[5] 以取得每個 hook 的更多詳細資訊。
較高層級的 SCM 可能會在 $GIT_DIR
中提供和管理額外資訊。
術語
請參閱 gitglossary[7]。
環境變數
各種 Git 命令會注意環境變數並更改其行為。標記為「Boolean」的環境變數會以與 Boolean 值組態變數相同的方式取得其值,例如「true」、「yes」、「on」和正數會被視為「yes」。
以下是一些變數
Git 儲存庫
這些環境變數適用於所有核心 Git 命令。注意:值得注意的是,它們可能會被位於 Git 之上的 SCM 使用/覆寫,因此如果使用外部前端,請小心。
-
GIT_INDEX_FILE
-
此環境變數指定備用索引檔。如果未指定,則使用預設的
$GIT_DIR/index
。 -
GIT_INDEX_VERSION
-
此環境變數指定在寫出索引檔時使用的索引版本。它不會影響現有的索引檔。預設情況下,會使用索引檔版本 2 或 3。請參閱 git-update-index[1] 以取得更多資訊。
-
GIT_OBJECT_DIRECTORY
-
如果透過此環境變數指定物件儲存目錄,則會在下方建立 sha1 目錄 - 否則會使用預設的
$GIT_DIR/objects
目錄。 -
GIT_ALTERNATE_OBJECT_DIRECTORIES
-
由於 Git 物件的不可變性質,舊物件可以封存到共用的唯讀目錄中。此變數指定一個以「:」分隔(在 Windows 上為「;」分隔)的 Git 物件目錄清單,可用於搜尋 Git 物件。新物件不會寫入這些目錄。
以
"
(雙引號)開頭的條目將被解釋為 C 風格的帶引號路徑,刪除開頭和結尾的雙引號並遵守反斜線轉義。例如,值"path-with-\"-and-:-in-it":vanilla-path
有兩個路徑:path-with-"-and-:-in-it
和vanilla-path
。 -
GIT_DIR
-
如果設定了
GIT_DIR
環境變數,則它會指定一個路徑,以取代預設的.git
作為儲存庫的基礎。--git-dir
命令列選項也會設定此值。 -
GIT_WORK_TREE
-
設定工作樹根目錄的路徑。這也可以由
--work-tree
命令列選項和 core.worktree 組態變數控制。 -
GIT_NAMESPACE
-
設定 Git 命名空間;請參閱 gitnamespaces[7] 以取得詳細資訊。
--namespace
命令列選項也會設定此值。 -
GIT_CEILING_DIRECTORIES
-
這應該是一個以冒號分隔的絕對路徑清單。如果設定,則它是 Git 在尋找儲存庫目錄時不應向上 chdir 的目錄清單(適用於排除載入速度慢的網路目錄)。它不會排除目前的的工作目錄或在命令列或環境中設定的 GIT_DIR。通常,Git 必須讀取此清單中的條目並解析可能存在的任何符號連結,以便將它們與目前目錄進行比較。但是,如果即使是這種存取也很慢,您可以將空條目新增至清單,以告知 Git 後續的條目不是符號連結,不需要解析;例如,
GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink
。 -
GIT_DISCOVERY_ACROSS_FILESYSTEM
-
在沒有 ".git" 儲存庫目錄的目錄中執行時,Git 會嘗試在父目錄中尋找此目錄,以尋找工作樹的頂部,但預設情況下它不會跨越檔案系統邊界。此 Boolean 環境變數可以設定為 true,以告知 Git 不要在檔案系統邊界停止。與
GIT_CEILING_DIRECTORIES
一樣,這不會影響透過GIT_DIR
或在命令列上設定的明確儲存庫目錄。 -
GIT_COMMON_DIR
-
如果將此變數設定為路徑,則通常位於 $GIT_DIR 中的非工作樹檔案將會從此路徑取得。工作樹特定檔案,例如 HEAD 或 index,會從 $GIT_DIR 取得。請參閱 gitrepository-layout[5] 和 git-worktree[1] 以取得詳細資訊。此變數的優先順序低於其他路徑變數,例如 GIT_INDEX_FILE、GIT_OBJECT_DIRECTORY…
-
GIT_DEFAULT_HASH
-
如果設定此變數,則新儲存庫的預設雜湊演算法將會設定為此值。複製時會忽略此值,並且一律使用遠端儲存庫的設定。預設值為「sha1」。請參閱 git-init[1] 中的
--object-format
。 -
GIT_DEFAULT_REF_FORMAT
-
如果設定此變數,則新儲存庫的預設參考後端格式將會設定為此值。預設值為「files」。請參閱 git-init[1] 中的
--ref-format
。
Git 提交
-
GIT_AUTHOR_NAME
-
在建立提交或標籤物件時,或在寫入 reflog 時,作者身分中使用的可讀名稱。覆寫
user.name
和author.name
組態設定。 -
GIT_AUTHOR_EMAIL
-
在建立提交或標籤物件時,或在寫入 reflog 時,作者身分中使用的電子郵件地址。覆寫
user.email
和author.email
組態設定。 -
GIT_AUTHOR_DATE
-
在建立提交或標籤物件時,或在寫入 reflog 時,作者身分使用的日期。請參閱 git-commit[1] 以取得有效格式。
-
GIT_COMMITTER_NAME
-
在建立提交或標籤物件時,或在寫入 reflog 時,提交者身分中使用的可讀名稱。覆寫
user.name
和committer.name
組態設定。 -
GIT_COMMITTER_EMAIL
-
在建立提交或標籤物件時,或在寫入 reflog 時,作者身分中使用的電子郵件地址。覆寫
user.email
和committer.email
組態設定。 -
GIT_COMMITTER_DATE
-
在建立提交或標籤物件時,或在寫入 reflog 時,提交者身分使用的日期。請參閱 git-commit[1] 以取得有效格式。
-
EMAIL
-
如果未設定其他相關的環境變數或組態設定,則在作者和提交者身分中使用的電子郵件地址。
Git 差異
-
GIT_DIFF_OPTS
-
唯一有效設定是 "--unified=??" 或 "-u??",以設定建立統一差異時顯示的上下文行數。這優先於在 Git diff 命令列上傳遞的任何 "-U" 或 "--unified" 選項值。
-
GIT_EXTERNAL_DIFF
-
當設定環境變數
GIT_EXTERNAL_DIFF
時,會呼叫其名稱指定的程式來產生差異,而 Git 不會使用其內建的差異機制。對於已新增、移除或修改的路徑,會使用 7 個參數呼叫GIT_EXTERNAL_DIFF
path old-file old-hex old-mode new-file new-hex new-mode
其中
- <old|new>-file
-
是
GIT_EXTERNAL_DIFF
可以用來讀取 <old|new> 內容的檔案, - <old|new>-hex
-
是 40 個十六進位數字的 SHA-1 雜湊,
- <old|new>-mode
-
是檔案模式的八進位表示法。
檔案參數可以指向使用者的工作檔案(例如,「git-diff-files」中的
new-file
)、/dev/null
(例如,新增新檔案時的old-file
)或暫存檔(例如,索引中的old-file
)。GIT_EXTERNAL_DIFF
不應擔心取消連結暫存檔,它會在GIT_EXTERNAL_DIFF
結束時移除。對於未合併的路徑,會使用 1 個參數 <path> 呼叫
GIT_EXTERNAL_DIFF
。對於呼叫
GIT_EXTERNAL_DIFF
的每個路徑,都會設定兩個環境變數:GIT_DIFF_PATH_COUNTER
和GIT_DIFF_PATH_TOTAL
。 -
GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
-
如果此 Boolean 環境變數設定為 true,則預期
GIT_EXTERNAL_DIFF
命令會傳回結束代碼 0(如果它認為輸入檔案相等),或傳回 1(如果它認為它們不同),就像diff(1)
一樣。如果設定為 false(預設值),則預期命令會傳回結束代碼 0,而無論是否相等。任何其他結束代碼都會導致 Git 回報嚴重錯誤。 -
GIT_DIFF_PATH_COUNTER
-
每個路徑都會遞增 1 的從 1 開始的計數器。
-
GIT_DIFF_PATH_TOTAL
-
路徑的總數。
其他
-
GIT_MERGE_VERBOSITY
-
一個數字,控制遞迴合併策略顯示的輸出量。覆寫 merge.verbosity。請參閱 git-merge[1]
-
GIT_PAGER
-
此環境變數會覆寫
$PAGER
。如果將它設定為空字串或值「cat」,則 Git 不會啟動分頁器。另請參閱 git-config[1] 中的core.pager
選項。 -
GIT_PROGRESS_DELAY
-
一個數字,控制在顯示選用進度指標之前要延遲多少秒。預設值為 2。
-
GIT_EDITOR
-
這個環境變數會覆寫
$EDITOR
和$VISUAL
。當在互動模式下需要啟動編輯器時,數個 Git 指令會使用這個變數。另請參閱 git-var[1] 和 git-config[1] 中的core.editor
選項。 -
GIT_SEQUENCE_EDITOR
-
當編輯互動式變基的待辦事項清單時,此環境變數會覆寫已設定的 Git 編輯器。另請參閱 git-rebase[1] 和 git-config[1] 中的
sequence.editor
選項。 -
GIT_SSH
-
GIT_SSH_COMMAND
-
如果設定了這兩個環境變數的任何一個,則 *git fetch* 和 *git push* 在需要連線到遠端系統時,會使用指定的指令而不是 *ssh*。傳遞給已設定指令的命令列參數由 ssh 變體決定。有關詳細資訊,請參閱 git-config[1] 中的
ssh.variant
選項。$GIT_SSH_COMMAND
的優先順序高於$GIT_SSH
,並由 shell 解讀,這允許包含額外的引數。另一方面,$GIT_SSH
必須只是程式的路徑 (如果需要額外的引數,則可以是包裝 shell 腳本)。通常,透過您的個人
.ssh/config
檔案設定任何想要的選項會更容易。請查閱您的 ssh 文件以取得更多詳細資訊。 -
GIT_SSH_VARIANT
-
如果設定了此環境變數,則會覆寫 Git 自動偵測
GIT_SSH
/GIT_SSH_COMMAND
/core.sshCommand
是指 OpenSSH、plink 還是 tortoiseplink 的結果。此變數會覆寫具有相同目的的組態設定ssh.variant
。 -
GIT_SSL_NO_VERIFY
-
將此環境變數設定並匯出為任何值,會告知 Git 在透過 HTTPS 擷取或推送時,不要驗證 SSL 憑證。
-
GIT_ATTR_SOURCE
-
設定將從中讀取 gitattributes 的 treeish。
-
GIT_ASKPASS
-
如果設定了此環境變數,則需要取得密碼或密語的 Git 指令 (例如,用於 HTTP 或 IMAP 驗證) 會呼叫此程式,並將適當的提示作為命令列引數,並從其 STDOUT 讀取密碼。另請參閱 git-config[1] 中的
core.askPass
選項。 -
GIT_TERMINAL_PROMPT
-
如果此布林環境變數設定為 false,則 git 不會在終端機上提示 (例如,當要求 HTTP 驗證時)。
-
GIT_CONFIG_GLOBAL
-
GIT_CONFIG_SYSTEM
-
從給定的檔案而不是從全域或系統層級組態檔案取得組態。如果設定了
GIT_CONFIG_SYSTEM
,則不會讀取在建置時定義的系統組態檔案 (通常是/etc/gitconfig
)。同樣地,如果設定了GIT_CONFIG_GLOBAL
,則不會讀取$HOME/.gitconfig
或$XDG_CONFIG_HOME/git/config
。可以設定為/dev/null
以略過讀取各自層級的組態檔案。 -
GIT_CONFIG_NOSYSTEM
-
是否略過從系統範圍的
$(prefix)/etc/gitconfig
檔案讀取設定。此布林環境變數可以與$HOME
和$XDG_CONFIG_HOME
一起使用,為挑剔的腳本建立可預測的環境,或者您可以將其設定為 true,以暫時避免使用有錯誤的/etc/gitconfig
檔案,同時等待有足夠權限的人來修正它。 -
GIT_FLUSH
-
如果此布林環境變數設定為 true,則諸如 *git blame* (在增量模式下)、*git rev-list*、*git log*、*git check-attr* 和 *git check-ignore* 等指令將在每次刷新記錄後強制刷新輸出串流。如果此變數設定為 false,則這些指令的輸出將使用完全緩衝的 I/O 完成。如果未設定此環境變數,Git 將根據 stdout 是否顯示為重新導向到檔案來選擇緩衝或以記錄為導向的刷新。
-
GIT_TRACE
-
啟用一般追蹤訊息,例如別名擴展、內建指令執行和外部指令執行。
如果此變數設定為 "1"、"2" 或 "true" (比較不區分大小寫),追蹤訊息將會列印到 stderr。
如果變數設定為大於 2 且小於 10 (嚴格來說) 的整數值,則 Git 會將此值解讀為開啟的檔案描述符,並嘗試將追蹤訊息寫入此檔案描述符。
或者,如果變數設定為絕對路徑 (以 * / * 字元開頭),則 Git 會將其解讀為檔案路徑,並嘗試將追蹤訊息附加到該路徑。
取消設定變數,或將其設定為空、"0" 或 "false" (不區分大小寫) 會停用追蹤訊息。
-
GIT_TRACE_FSMONITOR
-
啟用檔案系統監視器擴充功能的追蹤訊息。請參閱
GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_PACK_ACCESS
-
啟用對任何包的所有存取的追蹤訊息。對於每次存取,都會記錄包檔案名稱和包中的偏移量。這可能對疑難排解某些與包相關的效能問題很有幫助。請參閱
GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_PACKET
-
啟用給定程式的所有傳入或傳出數據包的追蹤訊息。這有助於偵錯物件協商或其他通訊協定問題。追蹤會在以 "PACK" 開頭的數據包處關閉 (但請參閱下方的
GIT_TRACE_PACKFILE
)。請參閱GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_PACKFILE
-
啟用追蹤給定程式傳送或接收的包檔案。與其他追蹤輸出不同,此追蹤是逐字記錄:沒有標頭,也沒有二進位資料的引號。您幾乎肯定會想要將其導向到檔案中 (例如,
GIT_TRACE_PACKFILE=/tmp/my.pack
),而不是將其顯示在終端機上或將其與其他追蹤輸出混合。請注意,目前僅針對複製和擷取的用戶端實作此功能。
-
GIT_TRACE_PERFORMANCE
-
啟用與效能相關的追蹤訊息,例如每個 Git 指令的總執行時間。請參閱
GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_REFS
-
啟用對 ref 資料庫進行操作的追蹤訊息。請參閱
GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_SETUP
-
在 Git 完成其設定階段後,啟用列印 .git、工作樹和目前工作目錄的追蹤訊息。請參閱
GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_SHALLOW
-
啟用可以幫助偵錯擷取/複製淺層儲存庫的追蹤訊息。請參閱
GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_CURL
-
啟用 curl 的完整追蹤傾印,其中包含所有傳入和傳出資料,包括 Git 傳輸協定的描述性資訊。這類似於在命令列上執行 curl
--trace-ascii
。請參閱GIT_TRACE
以取得可用的追蹤輸出選項。 -
GIT_TRACE_CURL_NO_DATA
-
當啟用 curl 追蹤時 (請參閱上方的
GIT_TRACE_CURL
),請勿傾印資料 (也就是說,僅傾印資訊行和標頭)。 -
GIT_TRACE2
-
啟用來自 "trace2" 程式庫的更詳細追蹤訊息。
GIT_TRACE2
的輸出是一種簡單的文字格式,適合人類閱讀。如果此變數設定為 "1"、"2" 或 "true" (比較不區分大小寫),追蹤訊息將會列印到 stderr。
如果變數設定為大於 2 且小於 10 (嚴格來說) 的整數值,則 Git 會將此值解讀為開啟的檔案描述符,並嘗試將追蹤訊息寫入此檔案描述符。
或者,如果變數設定為絕對路徑 (以 * / * 字元開頭),則 Git 會將其解讀為檔案路徑,並嘗試將追蹤訊息附加到該路徑。如果該路徑已存在且是目錄,則追蹤訊息將會寫入該目錄中的檔案 (每個程序一個檔案),並根據 SID 的最後一個元件和可選的計數器 (以避免檔案名稱衝突) 命名。
此外,如果變數設定為
af_unix:[<socket-type>:]<absolute-pathname>
,則 Git 會嘗試將該路徑作為 Unix Domain Socket 開啟。socket 類型可以是stream
或dgram
。取消設定變數,或將其設定為空、"0" 或 "false" (不區分大小寫) 會停用追蹤訊息。
請參閱 Trace2 文件 以取得完整詳細資訊。
-
GIT_TRACE2_EVENT
-
此設定會寫入適合機器解讀的 JSON 格式。請參閱
GIT_TRACE2
以取得可用的追蹤輸出選項,並參閱 Trace2 文件 以取得完整詳細資訊。 -
GIT_TRACE2_PERF
-
除了
GIT_TRACE2
中提供的文字訊息之外,此設定還會寫入基於欄位的格式,以了解巢狀區域。請參閱GIT_TRACE2
以取得可用的追蹤輸出選項,並參閱 Trace2 文件 以取得完整詳細資訊。 -
GIT_TRACE_REDACT
-
預設情況下,當啟用追蹤時,Git 會編輯 Cookie 的值、「Authorization:」標頭、「Proxy-Authorization:」標頭和包檔案 URI。將此布林環境變數設定為 false 以防止此編輯。
-
GIT_NO_REPLACE_OBJECTS
-
設定並匯出此環境變數會告知 Git 忽略取代 ref,且不要取代 Git 物件。
-
GIT_LITERAL_PATHSPECS
-
將此布林環境變數設定為 true 將會導致 Git 將所有路徑規格視為字面值,而不是 glob 模式。例如,執行
GIT_LITERAL_PATHSPECS=1 git log -- '*.c'
將會搜尋觸及路徑*.c
的 commit,而不是 glob*.c
符合的任何路徑。如果您將字面路徑傳送到 Git (例如,先前由git ls-tree
、--raw
diff 輸出等提供給您的路徑),您可能會需要此功能。 -
GIT_GLOB_PATHSPECS
-
將此布林環境變數設定為 true 將會導致 Git 將所有路徑規格視為 glob 模式 (又稱為 "glob" 魔術)。
-
GIT_NOGLOB_PATHSPECS
-
將此布林環境變數設定為 true 將會導致 Git 將所有路徑規格視為字面值 (又稱為 "literal" 魔術)。
-
GIT_ICASE_PATHSPECS
-
將此布林環境變數設定為 true 將會導致 Git 將所有路徑規格視為不區分大小寫。
-
GIT_NO_LAZY_FETCH
-
將此布林環境變數設定為 true 會告知 Git 不要按需從承諾遠端延遲擷取遺失的物件。
-
GIT_REFLOG_ACTION
-
當參考 (ref) 更新時,會建立參考日誌 (reflog) 條目來追蹤參考更新的原因(通常是更新參考的高階指令名稱),以及參考的新舊值。指令碼化的 Porcelain 命令可以使用
git-sh-setup
中的 `set_reflog_action` 輔助函式,將其名稱設定為此變數,以便在最終使用者將其作為最上層命令調用時,記錄在參考日誌的主體中。 -
GIT_REF_PARANOIA
-
如果此布林環境變數設定為 false,則在迭代參考清單時,會忽略損壞或命名不佳的參考。通常,Git 會嘗試包含任何此類參考,這可能會導致某些操作失敗。這通常是比較好的做法,因為潛在的破壞性操作(例如 git-prune[1])最好中止,而不是忽略損壞的參考(並因此認為它們指向的歷史記錄不值得儲存)。預設值為
1
(即,對於偵測和中止所有操作保持警戒)。您通常不需要將此設定為0
,但當嘗試從損毀的儲存庫中搶救資料時,可能會很有用。 -
GIT_COMMIT_GRAPH_PARANOIA
-
當從 commit-graph 載入 commit 物件時,Git 會對物件資料庫中的物件執行存在性檢查。這樣做是為了避免使用包含已刪除 commit 參考的過時 commit-graph 造成問題,但會帶來效能上的損失。
預設值為 "false",這會停用上述行為。將此設定為 "true" 會啟用存在性檢查,以便永遠不會從 commit-graph 中傳回過時的 commit,但會犧牲效能。
-
GIT_ALLOW_PROTOCOL
-
如果設定為以冒號分隔的協定清單,則行為如同
protocol.allow
設定為never
,並且清單中的每個協定都將protocol.<name>.allow
設定為always
(覆寫任何現有組態)。有關詳細資訊,請參閱 git-config[1] 中protocol.allow
的說明。 -
GIT_PROTOCOL_FROM_USER
-
將此布林環境變數設定為 false,以防止 fetch/push/clone 使用設定為
user
狀態的協定。這對於限制從不受信任的儲存庫進行遞迴子模組初始化,或用於將可能不受信任的 URL 輸入到 git 命令的程式非常有用。有關詳細資訊,請參閱 git-config[1]。 -
GIT_PROTOCOL
-
僅供內部使用。用於交握線路協定。包含以冒號 *:* 分隔的鍵清單,以及可選的值 *<鍵>[=<值>]*。必須忽略未知鍵和值的存在。
請注意,伺服器可能需要設定為允許此變數通過某些傳輸。當存取本機儲存庫時 (即
file://
或檔案系統路徑),以及透過git://
協定時,它將會自動傳播。對於 git-over-http,它應該在大多數組態中自動運作,但請參閱 git-http-backend[1] 中的討論。對於 git-over-ssh,可能需要設定 ssh 伺服器以允許客戶端傳遞此變數 (例如,使用 OpenSSH 的AcceptEnv GIT_PROTOCOL
)。此組態是可選的。如果沒有傳播變數,則用戶端將會回退到原始的「v0」協定 (但可能會錯過一些效能改進或功能)。此變數目前僅影響 clone 和 fetch;尚未用於 push (但將來可能會使用)。
-
GIT_OPTIONAL_LOCKS
-
如果此布林環境變數設定為 false,則 Git 將完成任何請求的操作,而無需執行任何需要取得鎖定的可選子操作。例如,這將會防止
git status
在有副作用的情況下重新整理索引。這對於在背景執行的程序很有用,這些程序不希望與儲存庫上的其他操作造成鎖定競爭。預設值為1
。 -
GIT_REDIRECT_STDIN
-
GIT_REDIRECT_STDOUT
-
GIT_REDIRECT_STDERR
-
僅限 Windows:允許將標準輸入/輸出/錯誤控制代碼重新導向至環境變數指定的路徑。這在多執行緒應用程式中特別有用,在這些應用程式中,通過 `CreateProcess()` 傳遞標準控制代碼的規範方法不是選項,因為它需要將控制代碼標記為可繼承 (因此**每個**產生的程序都會繼承它們,可能會阻止常規的 Git 操作)。主要預期的使用案例是使用命名管道進行通訊 (例如 `\\.\pipe\my-git-stdin-123`)。
支援兩個特殊值:`off` 將會直接關閉對應的標準控制代碼,如果 `GIT_REDIRECT_STDERR` 是 `2>&1`,則標準錯誤將會重新導向至與標準輸出相同的控制代碼。
-
GIT_PRINT_SHA1_ELLIPSIS
(已棄用) -
如果設定為 `yes`,則在(縮寫的)SHA-1 值之後列印省略符號。這會影響分離 HEAD 的指示 (git-checkout[1]) 和原始 diff 輸出 (git-diff[1])。在上述情況下列印省略符號不再被認為是足夠的,並且對它的支援很可能會在可預見的將來被移除 (連同變數一起)。
-
GIT_ADVICE
-
如果設定為 `0`,則停用所有建議訊息。這些訊息旨在向人類使用者提供提示,這些提示可能可以幫助他們擺脫問題情況或利用新功能。使用者可以使用 `advice.*` 組態鍵停用個別訊息。這些訊息可能會對執行 Git 程序的工具造成干擾,因此可以使用此變數來停用這些訊息。(也可使用 `--no-advice` 全域選項,但舊的 Git 版本在不理解此選項時可能會失敗。Git 版本如果不理解此選項,將會忽略環境變數)。
討論
從使用者手冊的 Git 概念章節和gitcore-tutorial[7]中可以獲得有關以下內容的更多詳細資訊。
一個 Git 專案通常由一個工作目錄組成,其頂層有一個 ".git" 子目錄。 .git 目錄包含壓縮的物件資料庫,其中表示專案的完整歷史記錄、將該歷史記錄連結到工作樹目前內容的「索引」檔案,以及指向該歷史記錄的具名指標(例如標籤和分支頭)。
物件資料庫包含三種主要類型的物件:blob,其中保存檔案資料;tree,指向 blob 和其他 tree 以建構目錄層次結構;以及 commit,每個 commit 都參考單一 tree 和一些父 commit。
commit 相當於其他系統稱作的「變更集」或「版本」,表示專案歷史記錄中的一個步驟,每個父級都表示緊接的前一個步驟。具有多個父級的 commit 表示獨立開發線的合併。
所有物件都以其內容的 SHA-1 雜湊命名,通常寫為 40 個十六進位數字的字串。此類名稱是全域唯一的。僅需簽署該 commit 即可驗證導致 commit 的整個歷史記錄。為此目的提供了第四種物件類型,即標籤。
第一次建立時,物件儲存在個別檔案中,但為了提高效率,稍後可能會將其壓縮到「pack 檔案」中。
稱為參考 (ref) 的具名指標標記了歷史記錄中的重要點。參考可以包含物件的 SHA-1 名稱或另一個參考的名稱(後者稱為「符號參考」)。名稱開頭為 `refs/head/` 的參考包含開發中分支的最新 commit (或「head」) 的 SHA-1 名稱。感興趣的標籤的 SHA-1 名稱儲存在 `refs/tags/` 下。名為 `HEAD` 的符號參考包含目前已簽出分支的名稱。
索引檔案會使用所有路徑的清單以及每個路徑的 blob 物件和一組屬性來初始化。blob 物件表示目前分支的 head 的檔案內容。屬性 (上次修改時間、大小等) 從工作樹中的對應檔案取得。可以透過比較這些屬性來找到後續對工作樹的變更。可以使用新內容更新索引,並且可以從儲存在索引中的內容建立新的 commit。
索引還能夠為給定路徑名稱儲存多個條目(稱為「階段」)。當合併正在進行時,這些階段用於保存檔案的各種未合併版本。
安全性
某些組態選項和掛鉤檔案可能會導致 Git 執行任意 Shell 命令。由於組態和掛鉤不是使用 `git clone` 複製的,因此通常可以安全地使用不受信任的內容複製遠端儲存庫,並使用 `git log` 等命令檢查它們。
但是,當 `.git` 目錄本身來自不受信任的來源時,在 `.git` 目錄 (或其周圍的工作樹) 中執行 Git 命令是不安全的。其組態和掛鉤中的命令會以通常的方式執行。
依預設,當儲存庫的所有者不是執行命令的使用者時,Git 將會拒絕執行。請參閱 git-config[1] 中 `safe.directory` 的條目。雖然這可以幫助您在多使用者環境中獲得保護,但請注意,您也可以取得由您擁有的不受信任儲存庫 (例如,如果您從不受信任的來源解壓縮 zip 檔案或 tarball)。在這種情況下,您需要先「清理」不受信任的儲存庫。
如果您有一個不受信任的 .git
目錄,您應該先使用 git clone --no-local
來複製它,以取得一份乾淨的副本。Git 的確會限制 upload-pack
所執行的選項和 hook 集合,而 upload-pack
會處理複製或提取的伺服器端,但請注意,針對 upload-pack
的攻擊面很大,因此這確實存在一定的風險。最安全的方式是以非特權使用者身份來提供儲存庫(透過 git-daemon[1]、ssh 或使用其他工具來變更使用者 ID)。請參閱 git-upload-pack[1] 的 SECURITY
章節中的討論。
進一步的文件
請參閱「描述」章節中的參考資料,開始使用 Git。以下內容可能對於初次使用者來說過於詳細。
使用者手冊的 Git 概念章節 和 gitcore-tutorial[7] 都提供了對基礎 Git 架構的介紹。
請參閱 gitworkflows[7] 以了解建議的工作流程概述。
另請參閱 howto 文件,以取得一些有用的範例。
內部機制記錄在 Git API 文件中。
從 CVS 遷移過來的使用者可能也想閱讀 gitcvs-migration[7]。
作者
Git 由 Linus Torvalds 開始開發,目前由 Junio C Hamano 維護。許多貢獻來自 Git 郵件列表 <git@vger.kernel.org>。https://openhub.net/p/git/contributors/summary 提供了更完整的貢獻者列表。
如果您有 git.git 本身的副本,則 git-shortlog[1] 和 git-blame[1] 的輸出可以顯示專案特定部分的作者。
回報錯誤
請將錯誤回報至 Git 郵件列表 <git@vger.kernel.org>,開發和維護主要在此進行。您無需訂閱該列表即可在那裡發送訊息。請參閱 https://lore.kernel.org/git 的列表存檔,以查看先前的錯誤報告和其他討論。
與安全性相關的問題應私下向 Git 安全性郵件列表 <git-security@googlegroups.com> 披露。
GIT
屬於 git[1] 套件的一部分