10.8 Git 內部原理 - 環境變數

來源:互聯網
上載者:User
環境變數

Git 總是在一個 bash shell 中運行,並藉助一些 shell 環境變數來決定它的運行方式。 有時候,知道它們是什麼以及它們如何讓 Git 按照你想要的方式去運行會很有用。 這裡不會列出所有的 Git 環境變數,但我們會涉及最有的那部分。 全域行為

像通常的程式一樣,Git 的常規行為依賴於環境變數。

GIT_EXEC_PATH 決定 Git 到哪找它的子程式 (像 git-commit, git-diff 等等)。 你可以用 git --exec-path 來查看當前設定.

通常不會考慮修改 HOME 這個變數(太多其它東西都依賴它),這是 Git 尋找全域設定檔的地方。 如果你想要一個包括全域配置的真正的便攜版 Git, 你可以在便攜版 Git 的 shell 配置中覆蓋 HOME 設定。

PREFIX 也類似,除了用於系統層級的配置。 Git 在 $PREFIX/etc/gitconfig 尋找此檔案.

如果設定了 GIT_CONFIG_NOSYSTEM,就禁用系統層級的設定檔。 這在系統配置影響了你的命令,而你又無許可權修改的時候很有用。

GIT_PAGER 控制在命令列上顯示多頁輸出的程式。 如果這個沒有設定,就會用 PAGER .

GIT_EDITOR 當使用者需要編輯一些文本(比如提交資訊)時, Git 會啟動這個編輯器。 如果沒設定,就會用 EDITOR 。 版本庫位置

Git 用了幾個變數來確定它如何與目前的版本庫互動。

GIT_DIR 是 .git 目錄的位置. 如果這個沒有設定, Git 會按照分類樹逐層向上尋找 .git 目錄,直到到達 ~ 或 /。

GIT_CEILING_DIRECTORIES 控制尋找 .git 目錄的行為。 如果你訪問載入很慢的目錄(如那些磁帶機上的或通過網路連接訪問的),你可能會想讓 Git 早點停止嘗試,尤其是 shell 構建時調用了 Git 。

GIT_WORK_TREE 是非空版本庫的工作目錄的根路徑 如果沒指定,就使用 $GIT_DIR 的父目錄。

GIT_INDEX_FILE 是索引檔案的路徑(只有非空版本庫有)

GIT_OBJECT_DIRECTORY 用來指定 .git/objects 目錄的位置。

GIT_ALTERNATE_OBJECT_DIRECTORIES 一個冒號分割的列表 (格式類似 /dir/one:/dir/two:…) 用來告訴 Git 到哪裡去找不在 GIT_OBJECT_DIRECTORY 目錄中的對象. 如果你有很多項目有相同內容的大檔案,這個可以用來避免儲存過多備份。 路徑規則

所謂 “pathspec” 是指你在 Git 中如何指定路徑, 包括萬用字元的使用。 它們會在 .gitignore 檔案中用到,命令列裡也會用到 (git add *.c)。

GIT_GLOB_PATHSPECS and GIT_NOGLOB_PATHSPECS 控制萬用字元在路徑規則中的預設行為。 如果GIT_GLOB_PATHSPECS 設定為 1, 萬用字元表現為萬用字元(這是預設設定); 如果GIT_NOGLOB_PATHSPECS 設定為 1,萬用字元僅匹配字面。意思是 *.c 只會匹配 檔案名稱是 “*.c” 的檔案, 而不是以 .c 結尾的檔案。 你可以在各個路徑規格中用 :(glob) 或 :(literal) 開頭來覆蓋這個配置,如 :(glob)*.c 。

GIT_LITERAL_PATHSPECS 禁用上面的兩種行為;萬用字元將不能用,首碼覆蓋也不能用。

GIT_ICASE_PATHSPECS 讓所有的路徑規格忽略大小寫。 提交

Git 提交對象的建立通常最後是由 git-commit-tree 來完成, git-commit-tree 用這些環境變數作主要的資訊源。 僅當這些值不存在才回退到預置的值。

GIT_AUTHOR_NAME 是 “author” 欄位的可讀的名字。

GIT_AUTHOR_EMAIL 是 “author” 欄位的郵件。

GIT_AUTHOR_DATE 是 “author” 欄位的時間戳記。

GIT_COMMITTER_NAME 是 “committer” 欄位的可讀的名字。

GIT_COMMITTER_EMAIL 是 “committer” 欄位的郵件。

GIT_COMMITTER_DATE 是 “committer” 欄位的時間戳記。

如果 user.email 沒有配置, 就會用到 EMAIL 指定的郵件地址。 如果 這個 也沒有設定, Git 繼續回退使用系統使用者和主機名稱。 網路

Git 使用 curl 庫通過 HTTP來完成網路操作, 所以 GIT_CURL_VERBOSE 告訴 Git 顯示所有由那個庫產生的訊息。 這跟在命令列執行 curl -v 差不多。

GIT_SSL_NO_VERIFY 告訴 Git 不用驗證 SSL 憑證。 這在有些時候是需要的, 例如你用一個自己簽名的認證通過 HTTPS 來提供 Git 服務, 或者你正在搭建 Git 伺服器,還沒有安裝完全的認證。

如果 Git 操作在網速低於 GIT_HTTP_LOW_SPEED_LIMIT 位元組/秒,並且持續GIT_HTTP_LOW_SPEED_TIME 秒以上的時間,Git 會終止那個操作。 這些值會覆蓋http.lowSpeedLimit 和 http.lowSpeedTime 配置的值。

GIT_HTTP_USER_AGENT 設定 Git 在通過 HTTP 通訊時用到的 user-agent。 預設值類似於 git/2.0.0。 比較和合并

GIT_DIFF_OPTS 這個有點起錯名字了 有效值僅支援 -u<n> 或 --unified=<n>,用來控制在 git diff 命令中顯示的內容行數。

GIT_EXTERNAL_DIFF 用來覆蓋 diff.external 配置的值。 如果設定了這個值, 當執行Git git diff 時,Git 會調用該程式。

GIT_DIFF_PATH_COUNTER 和 GIT_DIFF_PATH_TOTAL 對於 GIT_EXTERNAL_DIFF 或diff.external 指定的程式有用。 前者表示在一系列檔案中哪個是被比較的(從 1 開始),後者表示每批檔案的總數。

GIT_MERGE_VERBOSITY 控制遞迴合并策略的輸出。 允許的值有下面這些:

0 什麼都不輸出,除了可能會有一個錯誤資訊。

1 只顯示衝突。

2 還顯示檔案改變。

3 顯示因為沒有改變被跳過的檔案。

4 顯示處理的所有路徑。

5 顯示詳細的調試資訊。

預設值是 2. 調試

想 真正地 知道 Git 正在做什麼? Git 內建了相當完整的跟蹤資訊,你需要做的就是把它們開啟。 這些變數的可以用的值如下:

“true”, “1”, 或 “2” – 跟蹤類別寫到標準錯誤輸出.

以 / 開頭的絕對路徑 – 跟蹤輸出會被寫到那個檔案。

GIT_TRACE 控制常規跟蹤,它並不適用於特殊情況。 它跟蹤的範圍包括別名的展開和其他子程式的委託。

$ GIT_TRACE=true git lga20:12:49.877982 git.c:554               trace: exec: 'git-lga'20:12:49.878369 run-command.c:341       trace: run_command: 'git-lga'20:12:49.879529 git.c:282               trace: alias expansion: lga => 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'20:12:49.879885 git.c:349               trace: built-in: git 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'20:12:49.899217 run-command.c:341       trace: run_command: 'less'20:12:49.899675 run-command.c:192       trace: exec: 'less'

GIT_TRACE_PACK_ACCESS 控制訪問打包檔案的跟蹤資訊 第一個欄位是被訪問的打包檔案,第二個是檔案的位移量:

$ GIT_TRACE_PACK_ACCESS=true git status20:10:12.081397 sha1_file.c:2088        .git/objects/pack/pack-c3fa...291e.pack 1220:10:12.081886 sha1_file.c:2088        .git/objects/pack/pack-c3fa...291e.pack 3466220:10:12.082115 sha1_file.c:2088        .git/objects/pack/pack-c3fa...291e.pack 35175# […]20:10:12.087398 sha1_file.c:2088        .git/objects/pack/pack-e80e...e3d2.pack 5691498320:10:12.087419 sha1_file.c:2088        .git/objects/pack/pack-e80e...e3d2.pack 14303666On branch masterYour branch is up-to-date with 'origin/master'.nothing to commit, working directory clean

GIT_TRACE_PACKET 開啟網路操作包層級的跟蹤資訊

$ GIT_TRACE_PACKET=

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.