# git
> 原文: [https://git-scm.com/docs/git](https://git-scm.com/docs/git)
## 名稱
git - 愚蠢的內容跟蹤器
## 概要
```
git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--super-prefix=<path>]
<command> [<args>]
```
## 描述
Git是一個快速,可擴展的分布式版本控制系統,具有異常豐富的命令集,可提供高級操作和對內部的完全訪問。
參見 [gittutorial [7]](https://git-scm.com/docs/gittutorial) 開始,然后參見 [giteveryday [7]](https://git-scm.com/docs/giteveryday) 獲取有用的最小命令集。 [Git用戶手冊](user-manual.html)有更深入的介紹。
掌握了基本概念后,您可以回到此頁面了解Git提供的命令。您可以使用“git help command”了解有關各個Git命令的更多信息。 [gitcli [7]](https://git-scm.com/docs/gitcli) 手冊頁概述了命令行命令語法。
可以在`https://git.github.io/htmldocs/git.html`查看最新Git文檔的格式化和超鏈接副本。
## OPTIONS
```
--version
```
打印 _git_ 程序來自的Git套件版本。
```
--help
```
打印概要和最常用命令的列表。如果給出選項`--all`或`-a`,則打印所有可用命令。如果命名了Git命令,則此選項將顯示該命令的手冊頁。
其他選項可用于控制手冊頁的顯示方式。有關詳細信息,請參閱 [git-help [1]](https://git-scm.com/docs/git-help) ,因為`git --help ...`內部轉換為`git help ...`。
```
-C <path>
```
如同在_< path>中啟動git一樣運行_而不是當前的工作目錄。當給出多個`-C`選項時,相對于前一個`-C <path>`解釋每個后續的非絕對`-C <path>`。
此選項會影響期望路徑名稱的選項,如`--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`的空字符串。
```
--exec-path[=<path>]
```
安裝核心Git程序的路徑。這也可以通過設置GIT_EXEC_PATH環境變量來控制。如果沒有給出路徑, _git_ 將打印當前設置然后退出。
```
--html-path
```
打印路徑,不帶斜杠,安裝Git的HTML文檔并退出。
```
--man-path
```
打印manpath(參見`man(1)`)獲取此版本Git的手冊頁并退出。
```
--info-path
```
打印安裝記錄此版本Git的Info文件的路徑并退出。
```
-p
```
```
--paginate
```
如果標準輸出是終端,則將所有輸出管道輸入_減去_(或如果設置為$ PAGER)。這將覆蓋`pager.<cmd>`配置選項(請參閱下面的“配置機制”部分)。
```
-P
```
```
--no-pager
```
不要將Git輸出傳輸到尋呼機。
```
--git-dir=<path>
```
設置存儲庫的路徑。這也可以通過設置`GIT_DIR`環境變量來控制。它可以是當前工作目錄的絕對路徑或相對路徑。
```
--work-tree=<path>
```
設置工作樹的路徑。它可以是絕對路徑或相對于當前工作目錄的路徑。這也可以通過設置GIT_WORK_TREE環境變量和core.worktree配置變量來控制(有關更詳細的討論,請參閱 [git-config [1]](https://git-scm.com/docs/git-config) 中的core.worktree)。
```
--namespace=<path>
```
設置Git名稱空間。有關詳細信息,請參閱 [gitnamespaces [7]](https://git-scm.com/docs/gitnamespaces) 。相當于設置`GIT_NAMESPACE`環境變量。
```
--super-prefix=<path>
```
目前僅供內部使用。設置一個前綴,該前綴提供從存儲庫上方到其根目錄的路徑。一個用途是給出調用它的超級項目的子模塊上下文。
```
--bare
```
將存儲庫視為裸存儲庫。如果未設置GIT_DIR環境,則將其設置為當前工作目錄。
```
--no-replace-objects
```
不要使用替換引用來替換Git對象。有關詳細信息,請參閱 [git-replace [1]](https://git-scm.com/docs/git-replace) 。
```
--literal-pathspecs
```
按字面意思處理pathspecs(即沒有globbing,沒有pathspec magic)。這相當于將`GIT_LITERAL_PATHSPECS`環境變量設置為`1`。
```
--glob-pathspecs
```
為所有pathspec添加“glob”魔法。這相當于將`GIT_GLOB_PATHSPECS`環境變量設置為`1`。可以使用pathspec magic“:( literal)”在各個pathspec上禁用通配符
```
--noglob-pathspecs
```
為所有pathspec添加“literal”魔法。這相當于將`GIT_NOGLOB_PATHSPECS`環境變量設置為`1`。可以使用pathspec magic“:( glob)”在各個pathspec上啟用globbing
```
--icase-pathspecs
```
為所有pathspec添加“icase”魔法。這相當于將`GIT_ICASE_PATHSPECS`環境變量設置為`1`。
```
--no-optional-locks
```
不要執行需要鎖定的可選操作。這相當于將`GIT_OPTIONAL_LOCKS`設置為`0`。
```
--list-cmds=group[,group…?]
```
按組列出命令。這是一個內部/實驗選項,可能會在將來更改或刪除。支持的組包括:builtins,parseopt(使用parse-options的內置命令),main(libexec目錄中的所有命令),其他(`$PATH`中具有git-前綴的所有其他命令),list-< category> (請參閱command-list.txt中的類別),nohelpers(排除幫助程序命令),別名和配置(從配置變量completion.commands檢索命令列表)
## 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]
```
根據可用的ref給對象一個人類可讀的名稱
```
git-diff[1]
```
顯示提交,提交和工作樹等之間的更改
```
git-fetch[1]
```
從另一個存儲庫下載對象和引用
```
git-format-patch[1]
```
準備電子郵件提交補丁
```
git-gc[1]
```
清理不必要的文件并優化本地存儲庫
```
git-grep[1]
```
打印與圖案匹配的線條
```
git-gui[1]
```
Git的便攜式圖形界面
```
git-init[1]
```
創建一個空的Git存儲庫或重新初始化現有存儲庫
```
gitk[1]
```
Git存儲庫瀏覽器
```
git-log[1]
```
顯示提交日志
```
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-revert[1]
```
還原一些現有提交
```
git-rm[1]
```
從工作樹和索引中刪除文件
```
git-shortlog[1]
```
總結 _git log_ 輸出
```
git-show[1]
```
顯示各種類型的對象
```
git-stash[1]
```
將更改存儲在臟工作目錄中
```
git-status[1]
```
顯示工作樹狀態
```
git-submodule[1]
```
初始化,更新或檢查子模塊
```
git-tag[1]
```
創建,列出,刪除或驗證使用GPG簽名的標記對象
```
git-worktree[1]
```
管理多個工作樹
### 輔助命令
機器人:
```
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]
```
管理reflog信息
```
git-remote[1]
```
管理一組跟蹤的存儲庫
```
git-repack[1]
```
在存儲庫中打包解壓縮的對象
```
git-replace[1]
```
創建,列出,刪除引用以替換對象
讀寫器:
```
git-annotate[1]
```
使用提交信息注釋文件行
```
git-blame[1]
```
顯示修訂版和作者上次修改文件的每一行
```
git-count-objects[1]
```
計算解壓縮的對象數量及其磁盤消耗量
```
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簽名
```
gitweb[1]
```
Git Web界面(Web前端到Git存儲庫)
```
git-whatchanged[1]
```
顯示每個提交引入的差異日志
### 與他人互動
這些命令通過電子郵件補丁與外部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存儲庫導入并提交到Perforce存儲庫
```
git-quiltimport[1]
```
將quilt補丁集應用于當前分支
```
git-request-pull[1]
```
生成待處理更改的摘要
```
git-send-email[1]
```
將一組補丁作為電子郵件發送
```
git-svn[1]
```
Subversion存儲庫和Git之間的雙向操作
## 低級命令(管道)
雖然Git包含自己的瓷層,但它的低級命令足以支持替代瓷器的開發。這些瓷器的開發者可能首先閱讀 [git-update-index [1]](https://git-scm.com/docs/git-update-index) 和 [git-read-tree [1]](https://git-scm.com/docs/git-read-tree) 。
這些低級命令的接口(輸入,輸出,選項集和語義)比Porcelain級別命令更穩定,因為這些命令主要用于腳本使用。另一方面,Porcelain命令的界面可能會發生變化,以改善最終用戶體驗。
以下描述將低級命令劃分為操作對象(在存儲庫,索引和工作樹中)的命令,詢問和比較對象的命令,以及在存儲庫之間移動對象和引用的命令。
### 操縱命令
```
git-apply[1]
```
將修補程序應用于文件和/或索引
```
git-checkout-index[1]
```
將文件從索引復制到工作樹
```
git-commit-graph[1]
```
編寫并驗證Git提交圖文件
```
git-commit-tree[1]
```
創建一個新的提交對象
```
git-hash-object[1]
```
計算對象ID并可選擇從文件創建blob
```
git-index-pack[1]
```
構建現有打包存檔的包索引文件
```
git-merge-file[1]
```
運行三向文件合并
```
git-merge-index[1]
```
為需要合并的文件運行合并
```
git-multi-pack-index[1]
```
編寫并驗證多包索引
```
git-mktag[1]
```
創建標記對象
```
git-mktree[1]
```
從ls-tree格式的文本構建樹對象
```
git-pack-objects[1]
```
創建對象的打包存檔
```
git-prune-packed[1]
```
刪除包文件中已有的額外對象
```
git-read-tree[1]
```
將樹信息讀入索引
```
git-symbolic-ref[1]
```
閱讀,修改和刪除符號引用
```
git-unpack-objects[1]
```
從打包存檔中解壓縮對象
```
git-update-index[1]
```
將工作樹中的文件內容注冊到索引
```
git-update-ref[1]
```
安全地更新存儲在ref中的對象名稱
```
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-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-parse-remote[1]
```
有助于解析遠程存儲庫訪問參數的例程
```
git-receive-pack[1]
```
接收推入存儲庫的內容
```
git-shell[1]
```
受限制的登錄shell僅用于Git SSH訪問
```
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]
```
生成合并提交消息
```
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腳本的i18n設置代碼
```
git-sh-setup[1]
```
常見的Git shell腳本設置代碼
```
git-stripspace[1]
```
刪除不必要的空格
## 配置機制
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]](https://git-scm.com/docs/git-config) 。
## 標識符術語
```
<object>
```
指示任何類型對象的對象名稱。
```
<blob>
```
表示blob對象名稱。
```
<tree>
```
表示樹對象名稱。
```
<commit>
```
表示提交對象名稱。
```
<tree-ish>
```
表示樹,提交或標記對象名稱。采用< tree-ish>的命令參數最終想要在<樹>上運行。對象但自動解除引用< commit>和< tag>指向< tree>的對象。
```
<commit-ish>
```
表示提交或標記對象名稱。采用< commit-ish>的命令參數最終想要在< commit>上運行對象但自動解除引用< tag>指向< commit>的對象。
```
<type>
```
表示需要對象類型。目前之一:`blob`,`tree`,`commit`或`tag`。
```
<file>
```
表示文件名 - 幾乎總是相對于樹結構`GIT_INDEX_FILE`描述的根。
## 符號標識符
任何接受任何< object>的Git命令也可以使用以下符號表示法:
```
HEAD
```
表示當前分支的頭部。
```
<tag>
```
有效標簽_名稱_(即`refs/tags/<tag>`參考)。
```
<head>
```
有效頭_名稱_(即`refs/heads/<head>`參考)。
有關拼寫對象名稱的更完整列表,請參閱 [gitrevisions [7]](https://git-scm.com/docs/gitrevisions) 中的“指定修訂”部分。
## 文件/目錄結構
請參閱 [gitrepository-layout [5]](https://git-scm.com/docs/gitrepository-layout) 文檔。
有關每個鉤子的更多詳細信息,請閱讀 [githooks [5]](https://git-scm.com/docs/githooks) 。
更高級別的SCM可以在`$GIT_DIR`中提供和管理附加信息。
## 術語
請參閱 [gitglossary [7]](https://git-scm.com/docs/gitglossary) 。
## 環境變量
各種Git命令使用以下環境變量:
### Git存儲庫
這些環境變量適用于_所有_核心Git命令。 Nb:值得注意的是,它們可能被SCMS上面的GMS使用/覆蓋,所以如果使用外部前端則要小心。
```
GIT_INDEX_FILE
```
此環境允許指定備用索引文件。如果未指定,則使用`$GIT_DIR/index`的默認值。
```
GIT_INDEX_VERSION
```
此環境變量允許為新存儲庫指定索引版本。它不會影響現有的索引文件。默認情況下,使用索引文件版本2或3。有關詳細信息,請參閱 [git-update-index [1]](https://git-scm.com/docs/git-update-index) 。
```
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]](https://git-scm.com/docs/gitnamespaces) 。 `--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]](https://git-scm.com/docs/gitrepository-layout) 和 [git-worktree [1]](https://git-scm.com/docs/git-worktree) 。此變量的優先級低于其他路徑變量,例如GIT_INDEX_FILE,GIT_OBJECT_DIRECTORY ......
### Git承諾
```
GIT_AUTHOR_NAME
```
```
GIT_AUTHOR_EMAIL
```
```
GIT_AUTHOR_DATE
```
```
GIT_COMMITTER_NAME
```
```
GIT_COMMITTER_EMAIL
```
```
GIT_COMMITTER_DATE
```
```
EMAIL
```
見 [git-commit-tree [1]](https://git-scm.com/docs/git-commit-tree)
### Git Diffs
```
GIT_DIFF_OPTS
```
只有有效設置為“--unified = ??”或者“-u ??”設置創建統一差異時顯示的上下文行數。這優先于Git diff命令行上傳遞的任何“-U”或“--unified”選項值。
```
GIT_EXTERNAL_DIFF
```
設置環境變量`GIT_EXTERNAL_DIFF`時,將調用由其命名的程序,而不是上面描述的diff調用。對于添加,刪除或修改的路徑,使用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-hexdigit 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_DIFF_PATH_COUNTER
```
每個路徑的基于1的計數器遞增1。
```
GIT_DIFF_PATH_TOTAL
```
路徑總數。
### 其他
```
GIT_MERGE_VERBOSITY
```
控制遞歸合并策略顯示的輸出量的數字。覆蓋merge.verbosity。見 [git-merge [1]](https://git-scm.com/docs/git-merge)
```
GIT_PAGER
```
此環境變量會覆蓋`$PAGER`。如果將其設置為空字符串或值“cat”,則Git將不會啟動尋呼機。另請參見 [git-config [1]](https://git-scm.com/docs/git-config) 中的`core.pager`選項。
```
GIT_EDITOR
```
此環境變量會覆蓋`$EDITOR`和`$VISUAL`。當在交互模式下啟動編輯器時,它由幾個Git命令使用。另請參閱 [git-var [1]](https://git-scm.com/docs/git-var) 和 [git-config [1]](https://git-scm.com/docs/git-config) 中的`core.editor`選項。
```
GIT_SSH
```
```
GIT_SSH_COMMAND
```
如果設置了這些環境變量中的任何一個,則當需要連接到遠程系統時, _git fetch_ 和 _git push_ 將使用指定的命令而不是 _ssh_ 。傳遞給配置命令的命令行參數由ssh變量確定。有關詳細信息,請參閱 [git-config [1]](https://git-scm.com/docs/git-config) 中的`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_ASKPASS
```
如果設置了此環境變量,則需要獲取密碼或密碼短語(例如,用于HTTP或IMAP身份驗證)的Git命令將使用適當的提示作為命令行參數調用此程序,并從其STDOUT讀取密碼。另請參見 [git-config [1]](https://git-scm.com/docs/git-config) 中的`core.askPass`選項。
```
GIT_TERMINAL_PROMPT
```
如果此環境變量設置為`0`,則git將不會在終端上提示(例如,在請求HTTP身份驗證時)。
```
GIT_CONFIG_NOSYSTEM
```
是否跳過從系統范圍`$(prefix)/etc/gitconfig`文件中讀取設置。此環境變量可與`$HOME`和`$XDG_CONFIG_HOME`一起用于為挑剔腳本創建可預測的環境,或者您可以臨時設置它以避免在等待具有足夠權限的人員使用錯誤的`/etc/gitconfig`文件時進行修復。
```
GIT_FLUSH
```
如果此環境變量設置為“1”,則命令如 _git blame_ (在增量模式下), _git rev-list_ , _git log_ , _git check-attr_ 和 _git check-ignore_ 將在刷新每條記錄后強制刷新輸出流。如果此變量設置為“0”,則將使用完全緩沖的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_SETUP
```
在Git完成其設置階段后,啟用跟蹤消息打印.git,工作樹和當前工作目錄。有關可用的跟蹤輸出選項,請參見`GIT_TRACE`。
```
GIT_TRACE_SHALLOW
```
啟用跟蹤消息,以幫助調試獲取/克隆淺存儲庫。有關可用的跟蹤輸出選項,請參見`GIT_TRACE`。
```
GIT_TRACE_CURL
```
啟用git傳輸協議的所有傳入和傳出數據(包括描述性信息)的卷曲完整跟蹤轉儲。這類似于在命令行上執行curl `--trace-ascii`。此選項會覆蓋設置`GIT_CURL_VERBOSE`環境變量。有關可用的跟蹤輸出選項,請參見`GIT_TRACE`。
```
GIT_TRACE_CURL_NO_DATA
```
啟用卷曲跟蹤時(參見上面的`GIT_TRACE_CURL`),不要轉儲數據(即只轉儲信息行和標題)。
```
GIT_REDACT_COOKIES
```
這可以設置為以逗號分隔的字符串列表。當啟用卷曲跟蹤時(參見上面的`GIT_TRACE_CURL`),每當轉儲客戶端發送的“Cookies:”頭時,其密鑰在該列表中的cookie(區分大小寫)的值將被編輯。
```
GIT_LITERAL_PATHSPECS
```
將此變量設置為`1`將導致Git按字面處理所有pathspec,而不是作為glob模式。例如,運行`GIT_LITERAL_PATHSPECS=1 git log -- '*.c'`將搜索觸及路徑`*.c`的提交,而不是glob `*.c`匹配的任何路徑。如果要向Git提供文字路徑(例如,之前通過`git ls-tree`,`--raw` diff輸出等給你的路徑),你可能會想要這個。
```
GIT_GLOB_PATHSPECS
```
將此變量設置為`1`將導致Git將所有pathspecs視為glob模式(也稱為“glob”魔術)。
```
GIT_NOGLOB_PATHSPECS
```
將此變量設置為`1`將導致Git將所有pathspecs視為文字(也稱為“文字”魔法)。
```
GIT_ICASE_PATHSPECS
```
將此變量設置為`1`將導致Git將所有pathspec視為不區分大小寫。
```
GIT_REFLOG_ACTION
```
更新ref時,除了ref的舊值和新值之外,還會創建reflog條目以跟蹤ref更新的原因(通常是更新ref的高級命令的名稱) 。腳本化的Porcelain命令可以使用`git-sh-setup`中的set_reflog_action輔助函數將其名稱設置為此變量,當它被最終用戶作為頂級命令調用時,將記錄在reflog的主體中。
```
GIT_REF_PARANOIA
```
如果設置為`1`,則在迭代refs列表時包含損壞或命名錯誤的引用。在正常的,未損壞的存儲庫中,這沒有任何作用。但是,啟用它可能有助于git在存在損壞的refs的情況下檢測并中止某些操作。當執行像 [git-prune [1]](https://git-scm.com/docs/git-prune) 這樣的破壞性操作時,Git會自動設置此變量。您不應該自己設置它,除非您想要確保操作已觸及每個參考(例如,因為您正在克隆存儲庫以進行備份)。
```
GIT_ALLOW_PROTOCOL
```
如果設置為以冒號分隔的協議列表,則表現為`protocol.allow`設置為`never`,并且每個列出的協議都將`protocol.<name>.allow`設置為`always`(覆蓋任何現有配置)。換句話說,將不允許任何未提及的協議(即,這是白名單,而不是黑名單)。有關詳細信息,請參閱 [git-config [1]](https://git-scm.com/docs/git-config) 中`protocol.allow`的說明。
```
GIT_PROTOCOL_FROM_USER
```
設置為0以防止fetch / push / clone使用的協議配置為`user`狀態。這對于限制來自不受信任的存儲庫的遞歸子模塊初始化或對于將可能不受信任的URL提供給git命令的程序非常有用。有關詳細信息,請參閱 [git-config [1]](https://git-scm.com/docs/git-config) 。
```
GIT_PROTOCOL
```
僅限內部使用。用于握線協議。包含一個冒號_:_分隔的鍵列表,其中包含可選值_鍵[= value]_ 。必須忽略未知鍵和值的存在。
```
GIT_OPTIONAL_LOCKS
```
如果設置為`0`,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 (deprecated)
```
如果設置為`yes`,則在(縮寫)SHA-1值后面打印省略號。這會影響分離的HEAD( [git-checkout [1]](https://git-scm.com/docs/git-checkout) )和原始diff輸出( [git-diff [1]](https://git-scm.com/docs/git-diff) )的指示。在所提到的情況下打印省略號不再被認為是足夠的,并且在可預見的將來可能會刪除對它的支持(以及變量)。
## 討論
有關以下內容的更多詳細信息,請參見用戶手冊和 [gitcore-tutorial [7]](https://git-scm.com/docs/gitcore-tutorial) 的 [Git概念章節。](user-manual.html#git-concepts)
Git項目通常包含一個工作目錄,頂層有一個“.git”子目錄。 .git目錄包含一個表示項目完整歷史記錄的壓縮對象數據庫,一個將該歷史記錄鏈接到工作樹的當前內容的“索引”文件,以及指向該歷史記錄的指針,如標記和分公司負責人
對象數據庫包含三種主要類型的對象:blob,用于保存文件數據;樹,指向blob和其他樹來構建目錄層次結構;和提交,每個引用一個樹和一些父提交。
相當于其他系統稱為“變更集”或“版本”的提交代表項目歷史中的一個步驟,每個父項代表緊接在前的步驟。具有多個父項的提交代表獨立開發線的合并。
所有對象都由其內容的SHA-1哈希命名,通常寫為40個十六進制數字的字符串。這些名稱是全球唯一的。通過簽署該提交,可以保證導致提交的整個歷史記錄。為此目的提供第四對象類型,標簽。
首次創建時,對象存儲在單個文件中,但為了提高效率,以后可以將它們一起壓縮為“包文件”。
名為refs的命名指針標記歷史中的有趣點。 ref可以包含對象的SHA-1名稱或另一個ref的名稱。名稱以`ref/head/`開頭的引用包含正在開發的分支的最新提交(或“頭部”)的SHA-1名稱。感興趣的標簽的SHA-1名稱存儲在`ref/tags/`下。名為`HEAD`的特殊引用包含當前簽出分支的名稱。
索引文件使用所有路徑的列表進行初始化,并為每個路徑初始化blob對象和一組屬性。 blob對象表示當前分支頭部的文件內容。屬性(上次修改時間,大小等)取自工作樹中的相應文件。通過比較這些屬性可以找到對工作樹的后續更改。可以用新內容更新索引,并且可以從存儲在索引中的內容創建新提交。
索引還能夠存儲給定路徑名的多個條目(稱為“階段”)。這些階段用于在合并進行時保存文件的各種未合并版本。
## 進一步的文件
請參閱“說明”部分中的參考資料以開始使用Git。以下可能是首次使用者所需的詳細信息。
用戶手冊和 [gitcore-tutorial [7]](https://git-scm.com/docs/gitcore-tutorial) 的 [Git概念章節都提供了對底層Git架構的介紹。](user-manual.html#git-concepts)
有關推薦工作流程的概述,請參見 [gitworkflows [7]](https://git-scm.com/docs/gitworkflows) 。
有關一些有用的示例,另請參見 [howto](howto-index.html) 文檔。
內部結構記錄在 [Git API文檔](api-index)中。
從CVS遷移的用戶可能還想閱讀 [gitcvs-migration [7]](https://git-scm.com/docs/gitcvs-migration) 。
## 作者
Git由Linus Torvalds創辦,目前由Junio C Hamano維護。許多貢獻來自Git郵件列表< [git@vger.kernel.org](mailto:git@vger.kernel.org) >。 [http://www.openhub.net/p/git/contributors/summary](http://www.openhub.net/p/git/contributors/summary) 為您提供了更完整的貢獻者列表。
如果你自己克隆了git.git,那么 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 和 [git-blame [1]](https://git-scm.com/docs/git-blame) 的輸出可以向你展示項目特定部分的作者。
## 報告錯誤
將錯誤報告給Git郵件列表< [git@vger.kernel.org](mailto:git@vger.kernel.org) >主要完成開發和維護的地方。您無需訂閱列表即可在其中發送消息。有關以前的錯誤報告和其他討論,請參閱 [https://public-inbox.org/git](https://public-inbox.org/git) 的列表存檔。
與安全相關的問題應私下披露給Git Security郵件列表< [git-security@googlegroups.com](mailto:git-security@googlegroups.com) >。
## 也可以看看
[gittutorial [7]](https://git-scm.com/docs/gittutorial) , [gittutorial-2 [7]](https://git-scm.com/docs/gittutorial-2) , [giteveryday [7]](https://git-scm.com/docs/giteveryday) , [gitcvs-migration [7]](https://git-scm.com/docs/gitcvs-migration) , [gitglossary [7]](https://git-scm.com/docs/gitglossary) , [gitcore-tutorial [7]](https://git-scm.com/docs/gitcore-tutorial) , [gitcli [7]](https://git-scm.com/docs/gitcli) , [Git用戶手冊](user-manual.html), [gitworkflows [7 ]](https://git-scm.com/docs/gitworkflows)
## GIT
部分 [git [1]](https://git-scm.com/docs/git) 套件
- git
- git-config
- git-help
- git-init
- git-clone
- git-add
- git-status
- git-diff
- git-commit
- git-reset
- git-rm
- git-mv
- git-branch
- git-checkout
- git-merge
- git-mergetool
- git-log
- git-stash
- git-tag
- git-worktree
- git-fetch
- git-pull
- git-push
- git-remote
- git-submodule
- git-show
- git-log
- git-shortlog
- git-describe
- git-apply
- git-cherry-pick
- git-rebase
- git-revert
- git-bisect
- git-blame
- git-grep
- gitattributes
- giteveryday
- gitglossary
- githooks
- gitignore
- gitmodules
- gitrevisions
- gittutorial
- gitworkflows
- git-am
- git-format-patch
- git-send-email
- git-request-pull
- git-svn
- git-fast-import
- git-clean
- git-gc
- git-fsck
- git-reflog
- git-filter-branch
- git-instaweb
- git-archive
- git-bundle
- git-daemon
- git-update-server-info
- git-cat-file
- git-check-ignore
- git-checkout-index
- git-commit-tree
- git-count-objects
- git-diff-index
- git-for-each-ref
- git-hash-object
- git-ls-files
- git-merge-base
- git-read-tree
- git-rev-list
- git-rev-parse
- git-show-ref
- git-symbolic-ref
- git-update-index
- git-update-ref
- git-verify-pack
- git-write-tree