設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.49.1 無更改
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 無更改
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 無更改
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.4 無更改
-
2.46.0
2024-07-29
- 2.45.2 → 2.45.4 無更改
-
2.45.1
2024-04-29
-
2.45.0
2024-04-29
- 2.44.2 → 2.44.4 無更改
-
2.44.1
2024-04-19
-
2.44.0
2024-02-23
- 2.43.5 → 2.43.7 無更改
-
2.43.4
2024-04-19
- 2.43.2 → 2.43.3 無更改
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.3 → 2.42.4 無更改
-
2.42.2
2024-04-19
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.2 → 2.41.3 無更改
-
2.41.1
2024-04-19
-
2.41.0
2023-06-01
- 2.40.3 → 2.40.4 無更改
-
2.40.2
2024-04-19
- 2.40.1 無更改
- 2.40.0 無更改
- 2.39.5 無更改
-
2.39.4
2024-04-19
- 2.39.1 → 2.39.3 無更改
-
2.39.0
2022-12-12
- 2.38.3 → 2.38.5 無更改
-
2.38.2
2022-12-11
- 2.38.1 無更改
-
2.38.0
2022-10-02
- 2.37.3 → 2.37.7 無更改
-
2.37.2
2022-08-11
- 2.37.1 無更改
-
2.37.0
2022-06-27
- 2.36.1 → 2.36.6 無更改
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 無更改
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 無更改
-
2.34.0
2021-11-15
- 2.33.3 → 2.33.8 無更改
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
- 2.32.1 → 2.33.0 無更改
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 無更改
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 無更改
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 無更改
-
2.29.0
2020-10-19
- 2.28.1 無更改
-
2.28.0
2020-07-27
- 2.27.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.25.0
2020-01-13
- 2.23.1 → 2.24.4 無更改
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 無更改
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 無更改
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 無更改
-
2.19.2
2018-11-21
- 2.19.1 無更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 無更改
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 無更改
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
- 2.13.7 無更改
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
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] 手冊頁概述了命令列命令語法。
最新 Git 文件的格式化超連結副本可在 https://git.github.io/htmldocs/git.html 或 https://git-scm.tw/docs 檢視。
選項
- -v
- --version
-
列印 *git* 程式所屬的 Git 套件版本。
此選項在內部轉換為
git
version
...,並接受與 git-version[1] 命令相同的選項。如果同時給出--help
,它將優先於--version
。 - -h
- --help
-
列印概要和最常用命令列表。如果給出選項
--all
或-a
,則列印所有可用命令。如果指定了 Git 命令,此選項將顯示該命令的手冊頁。還有其他選項可用於控制手冊頁的顯示方式。有關更多資訊,請參閱 git-help[1],因為
git
--help
... 在內部轉換為git
help
...。 - -C <路徑>
-
執行,如同 Git 是在 *<路徑>* 而非當前工作目錄中啟動的。當給出多個
-C
選項時,每個後續的非絕對-C
<路徑> 都相對於前一個-C
<路徑> 進行解釋。如果 *<路徑>* 存在但為空,例如-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 <名稱>=<值>
-
向命令傳遞一個配置引數。給定的值將覆蓋配置檔案中的值。<名稱> 預期與 *git config* 列出的格式相同(子鍵用點分隔)。
請注意,在
git
-c
foo.bar
... 中省略=
是允許的,它將foo.bar
設定為布林真值(就像配置檔案中的 [foo
]bar
一樣)。如果包含等號但值為空(例如git
-c
foo.bar=
...),則將foo.bar
設定為空字串,git
config
--type=bool
會將其轉換為false
。 - --config-env=<名稱>=<環境變數>
-
與
-c
<名稱>=
<值> 類似,為配置變數 *<名稱>* 賦予一個值,其中 <環境變數> 是用於檢索值的環境變數的名稱。與-c
不同,沒有直接將值設定為空字串的快捷方式,而是環境變數本身必須設定為空字串。如果 *<環境變數>* 在環境中不存在,則會出錯。*<環境變數>* 不能包含等號,以避免與包含等號的 *<名稱>* 混淆。這對於您想向 Git 傳遞臨時配置選項,但在其他程序可能讀取您的命令列(例如
/proc/self/cmdline
)但不能讀取您的環境(例如/proc/self/environ
)的作業系統上執行此操作的情況很有用。此行為在 Linux 上是預設的,但在您的系統上可能不是。請注意,這可能會增加 `http.extraHeader` 等變數的安全性,其中敏感資訊是值的一部分,但不會增加例如 `url.`*<base>*`.insteadOf` 等變數的安全性,其中敏感資訊可以是鍵的一部分。
- --exec-path[=<路徑>]
-
您的核心 Git 程式安裝的路徑。這也可以透過設定 GIT_EXEC_PATH 環境變數來控制。如果未提供路徑,*git* 將列印當前設定然後退出。
- --html-path
-
列印 Git HTML 文件安裝路徑(不帶斜槓),然後退出。
- --man-path
-
列印此版本 Git 的 man 手冊頁的 manpath(參見
man
(1
)),然後退出。 - --info-path
-
列印此版本 Git 的 Info 文件檔案安裝路徑,然後退出。
- -p
- --paginate
-
如果標準輸出是終端,則將所有輸出透過管道傳輸到 *less*(如果已設定,則為 $PAGER)。這會覆蓋
pager.
<cmd> 配置選項(參見下面的“配置機制”部分)。 - -P
- --no-pager
-
不要將 Git 輸出透過管道傳輸到分頁器。
- --git-dir=<路徑>
-
設定倉庫(“.git”目錄)的路徑。這也可以透過設定
GIT_DIR
環境變數來控制。它可以是絕對路徑或相對於當前工作目錄的相對路徑。使用此選項(或
GIT_DIR
環境變數)指定 “.git” 目錄的位置會關閉倉庫發現功能(該功能會嘗試查詢包含 “.git” 子目錄的目錄,這是發現倉庫和工作樹頂層的方式),並告訴 Git 您處於工作樹的頂層。如果您不在工作樹的頂層目錄,您應該使用--work-tree=
<路徑> 選項(或GIT_WORK_TREE
環境變數)告訴 Git 工作樹的頂層位置。如果您只想將 Git 視為在 <路徑> 中啟動,請使用
git
-C
<路徑>。 - --work-tree=<路徑>
-
設定工作樹的路徑。它可以是絕對路徑或相對於當前工作目錄的路徑。這也可以透過設定 GIT_WORK_TREE 環境變數和 core.worktree 配置變數來控制(有關更詳細的討論,請參閱 git-config[1] 中的 core.worktree)。
- --namespace=<路徑>
-
設定 Git 名稱空間。有關更多詳細資訊,請參閱 gitnamespaces[7]。等同於設定
GIT_NAMESPACE
環境變數。 - --bare
-
將倉庫視為裸倉庫。如果未設定 GIT_DIR 環境變數,則將其設定為當前工作目錄。
- --no-replace-objects
-
不使用替換引用來替換 Git 物件。這等同於將
GIT_NO_REPLACE_OBJECTS
環境變數匯出為任何值。有關更多資訊,請參閱 git-replace[1]。 - --no-lazy-fetch
-
不按需從 promisor 遠端獲取缺失物件。與
git
cat-file
-e
<物件> 一起使用很有用,以檢視物件是否本地可用。這等同於將GIT_NO_LAZY_FETCH
環境變數設定為1
。 - --no-optional-locks
-
不執行需要鎖的可選操作。這等同於將
GIT_OPTIONAL_LOCKS
設定為0
。 - --no-advice
-
停用所有建議提示的列印。
- --literal-pathspecs
-
字面處理路徑規範(即,沒有萬用字元,沒有路徑規範魔法)。這等同於將
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=<組>[,<組>…]
-
按組列出命令。這是一個內部/實驗性選項,未來可能會更改或移除。支援的組有:builtins(內建命令),parseopt(使用 parse-options 的內建命令),main(libexec 目錄中的所有命令),others(
$PATH
中所有帶有 git- 字首的其他命令),list-<category>(參見 command-list.txt 中的類別),nohelpers(排除輔助命令),alias 和 config(從配置變數 completion.commands 中檢索命令列表)。 - --attr-source=<類樹物件>
-
從 <類樹物件> 讀取 gitattributes,而不是從工作樹。參見 gitattributes[5]。這等同於設定
GIT_ATTR_SOURCE
環境變數。
高階命令 (porcelain)
我們將 porcelain 命令分為主要命令和一些輔助使用者工具。
主要 porcelain 命令
- git-add[1]
-
將檔案內容新增到索引
- git-am[1]
-
從郵箱應用一系列補丁
- git-archive[1]
-
從指定樹建立檔案歸檔
- git-backfill[1]
-
在部分克隆中下載缺失物件
- git-bisect[1]
-
使用二分查詢定位引入 Bug 的提交
- 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]
-
打包 HEAD 和標籤以實現高效倉庫訪問
- 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]
-
收集資訊供使用者提交 Bug 報告
- git-count-objects[1]
-
計算未打包物件的數量及其磁碟佔用
- git-diagnose[1]
-
生成診斷資訊的 ZIP 歸檔
- git-difftool[1]
-
使用常用 diff 工具顯示更改
- 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 Web 介面(Git 倉庫的 Web 前端)
與其他互動
這些命令用於與外部 SCM 互動,以及透過電子郵件補丁與其他人員互動。
- git-archimport[1]
-
將 GNU Arch 倉庫匯入 Git
- git-cvsexportcommit[1]
-
將單個提交匯出到 CVS 檢出
- git-cvsimport[1]
-
從人們痛恨的另一個 SCM 中挽救您的資料
- git-cvsserver[1]
-
Git 的 CVS 伺服器模擬器
- git-imap-send[1]
-
將一組補丁從標準輸入傳送到 IMAP 資料夾
- git-p4[1]
-
從 Perforce 倉庫匯入並提交到 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
功能重疊。
低階命令 (plumbing)
儘管 Git 包含其自己的 porcelain 層,但其低階命令足以支援開發替代的 porcelain。此類 porcelain 的開發者可以從閱讀 git-update-index[1] 和 git-read-tree[1] 開始。
這些低階命令的介面(輸入、輸出、選項集和語義)旨在比 Porcelain 級命令穩定得多,因為這些命令主要用於指令碼化使用。而 Porcelain 命令的介面可能會更改,以改善終端使用者體驗。
以下描述將低階命令分為操作物件(在倉庫、索引和工作樹中)的命令、查詢和比較物件的命令,以及在倉庫之間移動物件和引用的命令。
操作命令
- 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-pairs[1]
-
比較提供的 blob 對的內容和模式
- 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]
-
按倒序時間順序列出提交物件
- 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]
-
Git over HTTP 的伺服器端實現
- 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 / 排除檔案
- 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]
-
生成合並提交訊息
- git-hook[1]
-
執行 Git 鉤子
- git-interpret-trailers[1]
-
在提交訊息中新增或解析結構化資訊
- 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 指令碼的國際化設定程式碼
- 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 推薦工作流概述
倉庫、命令和檔案介面
本文件討論使用者預期直接互動的倉庫和命令介面。有關標準的更多詳細資訊,請參見 --user-formats
在 git-help[1] 中。
- gitattributes[5]
-
定義每個路徑的屬性
- gitcli[7]
-
Git 命令列介面和約定
- githooks[5]
-
Git 使用的鉤子
- gitignore[5]
-
指定要忽略的故意未跟蹤檔案
- gitmailmap[5]
-
對映作者/提交者姓名和/或電子郵件地址
- gitmodules[5]
-
定義子模組屬性
- gitrepository-layout[5]
-
Git 倉庫佈局
- gitrevisions[7]
-
指定 Git 的修訂版本和範圍
檔案格式、協議和其他開發者介面
本文件討論檔案格式、網路協議和其他 Git 開發者介面。請參閱 --developer-interfaces
在 git-help[1] 中。
- gitformat-bundle[5]
-
bundle 檔案格式
- gitformat-chunk[5]
-
基於分塊的檔案格式
- gitformat-commit-graph[5]
-
Git 提交圖格式
- 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]。
識別符號術語
- <物件>
-
表示任何型別物件的物件名稱。
- <Blob>
-
表示一個 Blob 物件名稱。
- <樹>
-
表示一個樹物件名稱。
- <提交>
-
表示一個提交物件名稱。
- <類樹物件>
-
表示一個樹、提交或標籤物件名稱。接受 <類樹物件> 引數的命令最終想要操作一個 <樹> 物件,但會自動解引用指向 <樹> 的 <提交> 和 <標籤> 物件。
- <類提交物件>
-
表示一個提交或標籤物件名稱。接受 <類提交物件> 引數的命令最終想要操作一個 <提交> 物件,但會自動解引用指向 <提交> 的 <標籤> 物件。
- <型別>
-
表示需要一個物件型別。當前可以是:
blob
、tree
、commit
或tag
之一。 - <檔案>
-
表示一個檔名 - 幾乎總是相對於
GIT_INDEX_FILE
所描述的樹結構根目錄。
符號識別符號
檔案/目錄結構
請參閱 gitrepository-layout[5] 文件。
閱讀 githooks[5] 以獲取有關每個鉤子的更多詳細資訊。
更高級別的 SCM 可能會在 $GIT_DIR
中提供和管理額外資訊。
術語
請參閱 gitglossary[7]。
環境變數
各種 Git 命令會關注環境變數並改變其行為。標記為“布林值”的環境變數的取值方式與布林值配置變數相同,即,“true”、“yes”、“on”和正數被視為“是”,而“false”、“no”、“off”和“0”被視為“否”。
以下是變數
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 在查詢倉庫目錄時,不應向上切換目錄進入這些目錄(這對於排除載入緩慢的網路目錄很有用)。它不會排除當前工作目錄或透過命令列或環境變數設定的 GIT_DIR。通常,Git 必須讀取此列表中的條目並解析可能存在的任何符號連結,以便將它們與當前目錄進行比較。但是,如果此訪問速度也很慢,您可以向列表中新增一個空條目,以告訴 Git 後續條目不是符號連結,並且不需要解析;例如,
GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink
。 GIT_DISCOVERY_ACROSS_FILESYSTEM
-
當在沒有“.git”倉庫目錄的目錄中執行時,Git 會嘗試在父目錄中查詢此類目錄以找到工作樹的頂層,但預設情況下它不會跨越檔案系統邊界。可以將此布林環境變數設定為 true,以告訴 Git 不要在檔案系統邊界處停止。與
GIT_CEILING_DIRECTORIES
類似,這不會影響透過GIT_DIR
或命令列設定的顯式倉庫目錄。 GIT_COMMON_DIR
-
如果此變數設定為路徑,則通常位於 $GIT_DIR 中的非工作樹檔案將從此路徑獲取。工作樹特定的檔案,例如 HEAD 或索引,仍從 $GIT_DIR 獲取。有關詳細資訊,請參閱 gitrepository-layout[5] 和 git-worktree[1]。此變數的優先順序低於其他路徑變數,例如 GIT_INDEX_FILE、GIT_OBJECT_DIRECTORY…
GIT_DEFAULT_HASH
-
如果設定了此變數,則新倉庫的預設雜湊演算法將設定為此值。克隆時會忽略此值,並且始終使用遠端倉庫的設定。預設值為“sha1”。請參閱
--object-format
在 git-init[1] 中。 GIT_DEFAULT_REF_FORMAT
-
如果設定了此變數,則新倉庫的預設引用後端格式將設定為此值。預設值為“files”。請參閱
--ref-format
在 git-init[1] 中。
Git 提交
GIT_AUTHOR_NAME
-
建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的可讀名稱。它會覆蓋
user.name
和author.name
配置設定。 GIT_AUTHOR_EMAIL
-
建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的電子郵件地址。它會覆蓋
user.email
和author.email
配置設定。 GIT_AUTHOR_DATE
-
建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的日期。有關有效格式,請參閱 git-commit[1]。
GIT_COMMITTER_NAME
-
建立提交或標籤物件時,或寫入引用日誌時,在提交者身份中使用的可讀名稱。它會覆蓋
user.name
和committer.name
配置設定。 GIT_COMMITTER_EMAIL
-
建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的電子郵件地址。它會覆蓋
user.email
和committer.email
配置設定。 GIT_COMMITTER_DATE
-
建立提交或標籤物件時,或寫入引用日誌時,在提交者身份中使用的日期。有關有效格式,請參閱 git-commit[1]。
EMAIL
-
如果沒有設定其他相關的環境變數或配置,則在作者和提交者身份中使用的電子郵件地址。
Git 差異
GIT_DIFF_OPTS
-
唯一有效的設定是 "--unified=??" 或 "-u??",用於設定建立統一差異時顯示的上下文行數。此設定優先於在 Git diff 命令列上傳遞的任何 "-U" 或 "--unified" 選項值。
GIT_EXTERNAL_DIFF
-
當設定了環境變數
GIT_EXTERNAL_DIFF
時,Git 會呼叫該變數指定的程式來生成差異,並且不使用其內建的差異機制。對於已新增、已刪除或已修改的路徑,GIT_EXTERNAL_DIFF
會帶 7 個引數被呼叫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
退出時被刪除。對於未合併的路徑,
GIT_EXTERNAL_DIFF
會帶 1 個引數 <path> 被呼叫。對於
GIT_EXTERNAL_DIFF
每次呼叫的每個路徑,都會設定兩個環境變數:GIT_DIFF_PATH_COUNTER
和GIT_DIFF_PATH_TOTAL
。 GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
-
如果此布林環境變數設定為 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
-
在編輯互動式 rebase 的待辦列表時,此環境變數會覆蓋配置的 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
-
如果設定了此環境變數,則需要獲取密碼或口令(例如用於 HTTP 或 IMAP 認證)的 Git 命令將呼叫此程式,並以合適的提示作為命令列引數,然後從其標準輸出讀取密碼。另請參見 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
-
啟用對給定程式傳送或接收的 packfile 的跟蹤。與其他跟蹤輸出不同,此跟蹤是逐字的:沒有頭,也沒有對二進位制資料進行引用。您幾乎肯定希望將其直接輸出到檔案(例如,
GIT_TRACE_PACKFILE=/tmp/my.pack
),而不是在終端上顯示或與其他跟蹤輸出混合。請注意,目前這僅適用於克隆和抓取的客戶端。
GIT_TRACE_PERFORMANCE
-
啟用效能相關的跟蹤訊息,例如每個 Git 命令的總執行時間。有關可用的跟蹤輸出選項,請參閱
GIT_TRACE
。 GIT_TRACE_REFS
-
為對引用資料庫的操作啟用跟蹤訊息。有關可用的跟蹤輸出選項,請參閱
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 域套接字。套接字型別可以是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:" 頭和 packfile URI。將此布林環境變數設定為 false 可防止此編輯。
GIT_NO_REPLACE_OBJECTS
-
設定並匯出此環境變數會告訴 Git 忽略替換引用,並且不替換 Git 物件。
GIT_LITERAL_PATHSPECS
-
將此布林環境變數設定為 true 會導致 Git 將所有路徑規範視為字面值,而不是 glob 模式。例如,執行
GIT_LITERAL_PATHSPECS=1
git
log
--
*.c'
將搜尋修改路徑*.c
的提交,而不是 glob 模式*.c
匹配的任何路徑。如果您向 Git 提供字面路徑(例如,以前由git
ls-tree
、--raw
差異輸出等提供的路徑),您可能需要此功能。 GIT_GLOB_PATHSPECS
-
將此布林環境變數設定為 true 會導致 Git 將所有路徑規範視為 glob 模式(又稱 "glob" 魔術)。
GIT_NOGLOB_PATHSPECS
-
將此布林環境變數設定為 true 會導致 Git 將所有路徑規範視為字面值(又稱 "literal" 魔術)。
GIT_ICASE_PATHSPECS
-
將此布林環境變數設定為 true 會導致 Git 將所有路徑規範視為不區分大小寫。
GIT_NO_LAZY_FETCH
-
將此布林環境變數設定為 true 會告訴 Git 不要按需從 promisor 遠端倉庫懶惰地抓取缺失的物件。
GIT_REFLOG_ACTION
-
當引用更新時,會建立 reflog 條目來跟蹤引用更新的原因(通常是更新引用的高階命令的名稱),以及引用的舊值和新值。當由終端使用者作為頂級命令呼叫時,指令碼化的 Porcelain 命令可以使用
git-sh-setup
中的 set_reflog_action 輔助函式將其名稱設定為此變數,以便記錄在 reflog 正文中。 GIT_REF_PARANOIA
-
如果此布林環境變數設定為 false,則在遍歷引用列表時忽略損壞或命名不當的引用。通常 Git 會嘗試包含任何此類引用,這可能導致某些操作失敗。這通常是首選,因為潛在的破壞性操作(例如,git-prune[1])最好中止,而不是忽略損壞的引用(因此認為它們指向的歷史不值得儲存)。預設值為
1
(即,對檢測和中止所有操作保持警惕)。通常您不需要將其設定為0
,但在嘗試從損壞的倉庫中搶救資料時可能會有用。 GIT_COMMIT_GRAPH_PARANOIA
-
從提交圖載入提交物件時,Git 會對物件資料庫中的物件執行存在性檢查。這樣做是為了避免包含對已刪除提交引用的過時提交圖引起的問題,但這會帶來效能損失。
預設值為 "false",這會停用上述行為。將其設定為 "true" 會啟用存在性檢查,以便過時的提交永遠不會從提交圖中返回,但代價是效能下降。
GIT_ALLOW_PROTOCOL
-
如果設定為冒號分隔的協議列表,則行為就像
protocol.allow
設定為never
,並且每個列出的協議都將protocol.
<name>.allow
設定為always
(覆蓋任何現有配置)。有關詳細資訊,請參閱 git-config[1] 中protocol.allow
的描述。 GIT_PROTOCOL_FROM_USER
-
將此布林環境變數設定為 false 可阻止抓取/推送/克隆使用的、已配置為
user
狀態的協議。這對於限制從不受信任的倉庫遞迴初始化子模組,或對於向 git 命令提供可能不受信任的 URL 的程式非常有用。有關更多詳細資訊,請參閱 git-config[1]。 GIT_PROTOCOL
-
僅供內部使用。用於線路協議的握手。包含一個冒號 : 分隔的鍵列表,帶有可選值 <key>[=<value>]。必須忽略未知鍵和值的存在。
請注意,伺服器可能需要配置以允許此變數透過某些傳輸。在訪問本地倉庫(即
file://
或檔案系統路徑)以及透過git://
協議時,它將自動傳播。對於 git-over-http,它在大多數配置中都應該自動工作,但請參閱 git-http-backend[1] 中的討論。對於 git-over-ssh,ssh 伺服器可能需要配置以允許客戶端傳遞此變數(例如,透過 OpenSSH 使用AcceptEnv
GIT_PROTOCOL
)。此配置是可選的。如果變數未傳播,則客戶端將回退到原始的 "v0" 協議(但可能會錯過一些效能改進或功能)。此變數目前僅影響克隆和抓取;它尚未用於推送(但未來可能會)。
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])和原始差異輸出(git-diff[1])。在上述情況下列印省略號不再被認為是足夠的,並且在可預見的未來很可能會移除對此功能的支援(以及該變數)。 GIT_ADVICE
-
如果設定為
0
,則停用所有建議訊息。這些訊息旨在向人類使用者提供提示,幫助他們擺脫問題情境或利用新功能。使用者可以使用advice.*
配置鍵停用單個訊息。這些訊息可能會干擾執行 Git 程序的工具,因此此變數可用於停用這些訊息。(--no-advice
全域性選項也可用,但舊版 Git 可能在不理解此選項時失敗。無法理解此環境變數的 Git 版本將忽略它。)
討論
有關以下內容的更多詳細資訊,請參閱使用者手冊的 Git 概念章節和gitcore-tutorial[7]。
Git 專案通常由一個工作目錄和一個頂層的 ".git" 子目錄組成。.git 目錄中包含(除其他外)一個表示專案完整歷史記錄的壓縮物件資料庫、一個將該歷史記錄連結到工作樹當前內容的 "index" 檔案,以及指向該歷史記錄的命名指標,例如標籤和分支頭。
物件資料庫包含三種主要型別的物件:blob(儲存檔案資料);tree(指向 blob 和其他 tree 以構建目錄層次結構);以及 commit(每個 commit 引用一個 tree 和一些父 commit)。
commit(相當於其他系統中的 "changeset" 或 "version")代表專案歷史中的一個步驟,每個父 commit 代表緊前的一個步驟。具有多個父 commit 的 commit 表示獨立開發線的合併。
所有物件都以其內容的 SHA-1 雜湊值命名,通常寫成 40 位十六進位制數字的字串。這些名稱是全域性唯一的。透過僅簽署該 commit,可以擔保導致該 commit 的整個歷史。為此目的提供了第四種物件型別:標籤 (tag)。
物件在首次建立時儲存在單個檔案中,但為了效率,之後可能會被壓縮到 "pack file" 中。
稱為引用的命名指標標記歷史中有趣的點。引用可以包含物件的 SHA-1 名稱或另一個引用的名稱(後者稱為 "符號引用")。名稱以 refs/head/
開頭的引用包含正在開發的分支的最新提交(或 "頭")的 SHA-1 名稱。感興趣的標籤的 SHA-1 名稱儲存在 refs/tags/
下。名為 HEAD
的符號引用包含當前已檢出分支的名稱。
索引檔案會用所有路徑的列表進行初始化,並且對於每個路徑,都有一個 blob 物件和一組屬性。blob 物件表示檔案在當前分支頭部時的內容。屬性(上次修改時間、大小等)取自工作樹中的相應檔案。可以透過比較這些屬性來發現工作樹的後續更改。索引可以用新內容更新,並且可以從索引中儲存的內容建立新的提交。
索引還能夠為給定路徑名儲存多個條目(稱為 "階段")。這些階段用於在合併進行中時儲存檔案的各種未合併版本。
安全性
某些配置選項和鉤子檔案可能導致 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
(處理克隆或抓取的伺服器端)將執行的選項和鉤子集,但請注意,針對 upload-pack
的攻擊面很大,因此這確實帶來了一些風險。最安全的方法是作為非特權使用者提供倉庫服務(無論是透過 git-daemon[1]、ssh,還是使用其他工具更改使用者 ID)。請參閱 git-upload-pack[1] 的 SECURITY
部分中的討論。
更多文件
請參閱 "description" 部分中的參考資料以開始使用 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] 的輸出可以顯示專案中特定部分的作者。
報告 Bug
請向 Git 郵件列表 <git@vger.kernel.org> 報告 Bug,開發和維護主要在此進行。您無需訂閱該列表即可傳送郵件。請參閱 https://lore.kernel.org/git 上的列表存檔,以檢視以前的 Bug 報告和其他討論。
與安全相關的問題應私下向 Git 安全郵件列表 <git-security@googlegroups.com> 披露。