簡體中文 ▾ 主題 ▾ 最新版本 ▾ Git 最後更新於 2.50.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] 手冊頁概述了命令列命令語法。

最新 Git 文件的格式化超連結副本可在 https://git.github.io/htmldocs/git.htmlhttps://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 環境變數。

Git 命令

我們將 Git 分為高階(“porcelain”)命令和低階(“plumbing”)命令。

高階命令 (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 resetgit restoregit 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-formatsgit-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-interfacesgit-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 物件名稱。

<樹>

表示一個樹物件名稱。

<提交>

表示一個提交物件名稱。

<類樹物件>

表示一個樹、提交或標籤物件名稱。接受 <類樹物件> 引數的命令最終想要操作一個 <樹> 物件,但會自動解引用指向 <樹> 的 <提交> 和 <標籤> 物件。

<類提交物件>

表示一個提交或標籤物件名稱。接受 <類提交物件> 引數的命令最終想要操作一個 <提交> 物件,但會自動解引用指向 <提交> 的 <標籤> 物件。

<型別>

表示需要一個物件型別。當前可以是:blobtreecommittag 之一。

<檔案>

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

符號識別符號

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

HEAD

指示當前分支的 HEAD。

<標籤>

一個有效的標籤 *名稱*(即 refs/tags/<標籤> 引用)。

<頭>

一個有效的 head *名稱*(即 refs/heads/<頭> 引用)。

有關拼寫物件名稱的更完整列表,請參閱 gitrevisions[7] 中的“指定修訂版本”部分。

檔案/目錄結構

請參閱 gitrepository-layout[5] 文件。

閱讀 githooks[5] 以獲取有關每個鉤子的更多詳細資訊。

更高級別的 SCM 可能會在 $GIT_DIR 中提供和管理額外資訊。

術語

請參閱 gitglossary[7]

環境變數

各種 Git 命令會關注環境變數並改變其行為。標記為“布林值”的環境變數的取值方式與布林值配置變數相同,即,“true”、“yes”、“on”和正數被視為“是”,而“false”、“no”、“off”和“0”被視為“否”。

以下是變數

系統

HOME

指定使用者主目錄的路徑。在 Windows 上,如果未設定,Git 將把程序環境變數設定為:如果 $HOMEDRIVE$HOMEPATH 都存在,則為 $HOMEDRIVE$HOMEPATH;否則,如果 $USERPROFILE 存在,則為 $USERPROFILE

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 在查詢倉庫目錄時,不應向上切換目錄進入這些目錄(這對於排除載入緩慢的網路目錄很有用)。它不會排除當前工作目錄或透過命令列或環境變數設定的 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-formatgit-init[1] 中。

GIT_DEFAULT_REF_FORMAT

如果設定了此變數,則新倉庫的預設引用後端格式將設定為此值。預設值為“files”。請參閱 --ref-formatgit-init[1] 中。

Git 提交

GIT_AUTHOR_NAME

建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的可讀名稱。它會覆蓋 user.nameauthor.name 配置設定。

GIT_AUTHOR_EMAIL

建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的電子郵件地址。它會覆蓋 user.emailauthor.email 配置設定。

GIT_AUTHOR_DATE

建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的日期。有關有效格式,請參閱 git-commit[1]

GIT_COMMITTER_NAME

建立提交或標籤物件時,或寫入引用日誌時,在提交者身份中使用的可讀名稱。它會覆蓋 user.namecommitter.name 配置設定。

GIT_COMMITTER_EMAIL

建立提交或標籤物件時,或寫入引用日誌時,在作者身份中使用的電子郵件地址。它會覆蓋 user.emailcommitter.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_COUNTERGIT_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 fetchgit 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-listgit loggit check-attrgit 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 域套接字。套接字型別可以是 streamdgram

取消設定此變數,或將其設定為空、"0" 或 "false"(不區分大小寫)會停用跟蹤訊息。

有關完整詳細資訊,請參閱 Trace2 文件

GIT_TRACE2_EVENT

此設定寫入一種基於 JSON 的格式,適合機器解釋。有關可用的跟蹤輸出選項,請參閱 GIT_TRACE2Trace2 文件以獲取完整詳細資訊。

GIT_TRACE2_PERF

除了 GIT_TRACE2 中可用的基於文字的訊息外,此設定還會寫入一種基於列的格式,用於理解巢狀區域。有關可用的跟蹤輸出選項,請參閱 GIT_TRACE2Trace2 文件以獲取完整詳細資訊。

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_STDERR2>&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> 披露。

GIT

Git[1] 套件的一部分

scroll-to-top