自定義 Git - Git 配置



Git 配置非常重要,因為它定義了 Git 在您的系統上的行為。Git 的配置可以在三個不同的級別指定——**系統、全域性**和**本地**。

配置級別

1. 系統級別

  • 配置位於 **[path]/etc/gitconfig**。

  • 包含應用於系統上所有使用者和倉庫的配置。

  • 要編輯此檔案,請使用帶有 **--system** 選項的 **git config**。

git config --system <key> <value>

2. 全域性級別

  • 配置位於 **~/.gitconfig** 或 **~/.config/git/config** 檔案中。

  • 包含應用於當前使用者的配置。

  • 要編輯此檔案,請使用 **--global** 選項。

git config --global <key> <value>

3. 本地級別

  • 配置位於倉庫內的 **.git/config** 檔案中。

  • 包含應用於當前倉庫的配置。

  • 要編輯此檔案,請使用 **--local** 選項或不使用任何選項,因為 **local** 是預設選項。

git config --local <key> <value>

倉庫特定設定優先於使用者特定設定,使用者特定設定優先於系統範圍設定。

此設定層次結構適用於每個級別。

基本客戶端配置

Git 配置選項有兩種型別:伺服器端和客戶端。

大多數設定是客戶端設定,用於確定個人工作偏好。

儘管有許多可能性,但這裡只討論最流行和最實用的設定。

使用以下命令檢視我們 Git 版本的全部選項列表

man git-config

core.editor

  • Git 預設情況下使用由 **VISUAL** 或 **EDITOR** 環境變數設定的文字編輯器,或者將預設編輯器設定為 vi 用於編輯提交和標籤訊息。

使用 **core.editor** 選項修改當前預設編輯器。

git config --global core.editor emacs

無論我們的首選 shell 編輯器是什麼,Git 都將使用 Emacs 修改訊息。

commit.template

Git 允許我們選擇一個檔案作為建立提交時預設的第一個訊息,方法是使用 **commit.template** 變數。

  • 此模板檔案可以包含有關我們打算使用的提交訊息結構和樣式的提醒和說明。

  • 每次提交時,我們都可以透過使用提交模板來提醒自己或他人預期的訊息格式,這有助於確保一致性。

  • 提交模板作為一條有用的提醒,以保持主題行簡短,在其下方提供指向任何相關問題或錯誤跟蹤器票證的連結,並新增描述性資訊。

在 Git 中配置 **commit.template** 值以建立預設提交訊息模板。

git config --global commit.template ~/.taskmessage.txt
git commit

core.pager

  • 可以使用 Git 的 **core.pager** 設定配置顯示來自 **git log** 和 **git diff** 等命令的輸出的分頁程式。

  • 它最初設定為 **less**,但我們可以將其修改為使用其他分頁程式,或者透過將其設定為空字串(**''**)來完全關閉分頁。

  • 如果停用分頁,Git 將列印整個輸出,無論其長度如何,都不會暫停。

git config --global core.pager ''

user.signingkey

  • 當我們使用 Git 的 **user.signingkey** 引數(允許我們提供一個 GPG 金鑰)時,更容易使用預設金鑰來簽名帶註釋的標籤。

我們使用此命令來設定它

git config --global user.signingkey 

將 **<gpg-key-id>** 替換為我們的 GPG 金鑰 ID。

配置 **user.signingkey** 後,我們可以使用 **git tag -s <tag-name>** 命令來簽名標籤,而無需每次都提供我們的金鑰。

git tag -s <tag-name>

core.excludesfile

  • 使用 Git,我們可以為應該在我們的機器上所有倉庫中忽略的模式(例如 **.DS_Store** 檔案或臨時編輯器檔案,如 **~** 或 **.swp**)提供一個全域性忽略檔案,方法是使用 **core.excludesfile** 設定。

  • 專案特定的 **.gitignore** 檔案從中受益。

  • 我們可以使用 **core.excludesfile** 引數建立一個全域性 **.gitignore** 檔案(例如 **~/.gitignore_global**),為我們希望 Git 在所有倉庫中忽略的檔案提供模式。

Git 將不會跟蹤或暫存與全域性忽略檔案中指定的模式匹配的檔案,我們使用 **git config --global core.excludesfile ~/.gitignore_global** 來配置它。

*~
.*.swp
.DS_Store

help.autocorrect

沒有 **help.autocorrect**:如果我們寫錯了命令,Git 會識別最有可能正確的命令,但不會執行它。

啟用 **help.autocorrect** 後,如果我們將其設定為非零值,Git 將在短暫延遲後自動執行最接近匹配的命令。

例如,如果我們將其設定為 20(或兩秒鐘),我們將得到

git config --global help.autocorrect 20
git commt -m "Fix bug"
WARNING: You called a Git command named 'commt', which does not exist.
Continuing under the assumption that you meant 'commit'
in 2 seconds automatically...

Git 中的顏色

Git 提供彩色終端輸出,使命令結果更容易閱讀,並幫助區分不同型別的資料。

我們可以使用各種設定選項來更改顏色以符合我們的品味。

此功能有助於更快、更清晰地解釋 Git 輸出。

color.ui

Git 中的 **color.ui** 設定控制是否使用彩色輸出。

要停用所有彩色終端輸出,我們可以使用以下命令將其設定為 false:

git config --global color.ui false
  • 當輸出定向到終端時,Git 預設情況下應用顏色;否則,它會省略顏色程式碼。

  • 當輸出路由到檔案或管道時,會應用顏色程式碼。

  • 雖然很少需要,但我們可以將其設定為 **always** 以在所有輸出中包含顏色程式碼。

或者,我們可以根據需要使用命令的 **--color** 引數在重定向輸出中強制使用顏色。

color.*

Git 提供了諸如 **color.branch**、**color.diff**、**color.interactive** 和 **color.status** 等命令特定的顏色選項,為使用者提供了廣泛的顏色靈活性。

我們可以將每個設定設定為 **true**、**false** 或 **always** 來調整在某些 Git 操作中如何使用顏色。

color.branch
color.diff
color.interactive
color.status

Git 使用子設定允許我們更改單個命令輸出段的顏色。

例如,要將 diff 輸出中的額外行格式化為帶有黃色背景和綠色文字的粗體格式,請使用

git config —global color.diff.new "green yellow bold"

我們可以從紅色、藍色或青色等顏色以及粗體、暗淡或下劃線等屬性中進行選擇。

格式和空格

在協作開發中,格式和空格問題可能具有挑戰性,尤其是在跨不同平臺工作時。

不同系統上的不同換行符或編輯器設定可能會導致間距的細微差異。

Git 提供配置選項來幫助處理和解決這些問題。

core.autocrlf

Git 使用 **core.autocrlf** 引數處理不同作業系統之間的換行符問題。

  • 要在檢出程式碼時自動將換行符 (LF) 結尾轉換為回車符 + 換行符 (CRLF),並在將檔案新增到索引時將其轉換回 LF,請在 Windows 上將其設定為 **true**。

  • 透過這樣做,避免了由不同平臺上的不同換行符引起的難題。

git config --global core.autocrlf true

要在提交時讓 Git 將 CRLF 結尾更改為 LF,而不在檢出時將 LF 轉換回 CRLF,請在 Linux 或 macOS 上(其中 LF 換行符是標準)將 **core.autocrlf** 設定為 input。

這在 Windows 檢出中保留了 CRLF,但保證了倉庫和 macOS/Linux 上的 LF 結尾。

git config --global core.autocrlf input

當 **core.autocrlf** 設定為 input 時,在 Windows 檢出中保留 CRLF 結尾,同時在倉庫和 macOS/Linux 上確保 LF 結尾。

如果我們希望為僅限 Windows 的專案在倉庫中保留 CRLF 結尾,請將 **core.autocrlf** 設定為 false。

git config --global core.autocrlf false

core.whitespace

Git 使用六個主要的檢查來識別和解決空格問題。

它預設情況下會啟用對製表符之前的空格、檔案末尾的空行和行尾的空格的檢查。

  • 預設情況下,對行尾的回車符、縮排中的製表符和空格代替製表符的檢查被停用。

  • 使用 **core.whitespace** 配置要啟用或停用的檢查。

  • 選項名稱應以逗號分隔,**-** 表示停用選項。

  • 例如,我們可以將其設定為啟用除製表符之前的空格檢查之外的所有內容。

git config --global core.whitespace \
    trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol

我們可以在 **core.whitespace** 設定中僅指定要自定義的部分,而無需列出所有選項。

git config --global core.whitespace \
-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol

Git 透過在 **git diff** 期間檢測和顏色編碼來幫助我們在提交之前解決空格問題。

使用 **--whitespace=warn** 或 **--whitespace=fix**,我們可以在使用 **git apply** 應用補丁時自動解決空格問題或接收警告。

重寫提交時,還可以使用 **--whitespace=fix** 選項來解決 **git rebase** 的空格問題。

git apply --whitespace=warn <patch>
git apply --whitespace=fix <patch>

伺服器配置

receive.fsckObjects

Git 可以透過檢查物件的 SHA-1 校驗和以確保它指向一個真實的 物件,在推送期間確認物件的完整性。

由於此驗證可能對效能造成影響,尤其是在處理大型程式碼庫時,因此預設情況下它是停用的。

receive.fsckObjects設定為true,以便在每次推送後執行此檢查。

git config --system receive.fsckObjects true

receive.denyNonFastForwards

如果我們重新整理已經推送的提交,然後嘗試再次推送(而這些提交不在遠端分支上),Git 將拒絕推送。

使用-f標誌可以克服這個問題並強制更新遠端分支。

receive.denyNonFastForwards設定為true以阻止這些強制推送。

git config --system receive.denyNonFastForwards true

receive.denyDeletes

receive.denyDeletes設定為true,以阻止使用者刪除分支或標籤作為denyNonFastForwards策略的變通方法。

git config --system receive.denyDeletes true

為了刪除遠端分支,必須手動從伺服器刪除引用檔案,因為此選項阻止任何分支或標籤的刪除。

建立別名

可以為各種 Git 命令建立快捷方式或別名。請參考以下命令

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit

檢視配置

要檢視當前配置,可以執行以下命令

# Lists all configurations
git config --list

# Lists global configurations
git config --global --list

# Lists local configurations
git config --local --list

正確的 Git 配置可以增強您的工作流程並提高協作效率。

廣告