Git
English ▾ 主題 ▾ 最新版本 ▾ git 最後更新於 2.47.0

名稱

git - 愚笨的內容追蹤器

概要

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.htmlhttps://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 指令

我們將 Git 分為高階("瓷器")指令和低階("水管")指令。

高階指令(瓷器)

我們將瓷器指令分為主要指令和一些輔助使用者工具。

主要瓷器指令

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 resetgit restoregit 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>

表示需要物件類型。目前為以下其中一項:blobtreecommittag

<file>

表示檔名 - 幾乎總是相對於 GIT_INDEX_FILE 描述的樹狀結構的根目錄。

符號識別符

任何接受 <object> 的 Git 命令也可以使用下列符號表示法

HEAD

表示目前分支的頭部。

<tag>

有效的標籤名稱(即 refs/tags/<tag> 參考)。

<head>

有效的頭部名稱(即 refs/heads/<head> 參考)。

如需更完整的物件名稱表示方式列表,請參閱 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-itvanilla-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.nameauthor.name 組態設定。

GIT_AUTHOR_EMAIL

在建立提交或標籤物件時,或在寫入 reflog 時,作者身分中使用的電子郵件地址。覆寫 user.emailauthor.email 組態設定。

GIT_AUTHOR_DATE

在建立提交或標籤物件時,或在寫入 reflog 時,作者身分使用的日期。請參閱 git-commit[1] 以取得有效格式。

GIT_COMMITTER_NAME

在建立提交或標籤物件時,或在寫入 reflog 時,提交者身分中使用的可讀名稱。覆寫 user.namecommitter.name 組態設定。

GIT_COMMITTER_EMAIL

在建立提交或標籤物件時,或在寫入 reflog 時,作者身分中使用的電子郵件地址。覆寫 user.emailcommitter.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_COUNTERGIT_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 類型可以是 streamdgram

取消設定變數,或將其設定為空、"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] 套件的一部分

scroll-to-top