配置文件
也許當初你匆匆而過,早已經忘記了在何時何地配置過你的用戶名和郵箱地址,但這卻是使用 git 最初的一件事,形如:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
初次遇見兩段如此長的命令行,我敢打賭你也是像我一樣記不住的。接下來我們通過下面的學習,我相信你會慢慢瞭解到它的簡單以及有趣之處。
首先,Git 會讀取一系列的配置文件來配置它的行爲。第一個讀取的文件是系統級別的 /etc/gitconfig
,配置文件中的內容會作用於系統當中每一個用戶以及他們所有的 git 倉庫。你可以通過給 git config
命令帶上 --system
參數讀寫該配置文件,默認情況下,該文件是不存在的,且必須有 root 權限才能操作。
第二個讀取的配置文件是用戶級別的 ~/.gitconfig
(或者 ~/.config/git/config
),配置文件中的內容僅作用於當前用戶。你可以通過給 git config
命令帶上 --global
參數讀寫該配置文件。如文章開頭例子的設定便會寫入該配置文件:
[user]
name = Your Name
email = [email protected]
在這裏你可能會有疑問,那什麼時候 Git 纔會讀寫 ~/.config/git/config
呢?官方文檔給出的解釋是:僅當 ~/.gitconfig
不存在,且 ~/.config/git/config
存在時,它纔會生效。
最後一個讀取的配置文件是當前 Git 目錄下的 .git/config
,配置文件中的內容僅作用於當前 Git 倉庫,你可以通過給 git config
命令帶上 --local
參數讀寫該配置文件,如果你執行命令時不指定任何級別,那麼默認級別就是它。
這裏面的每一個級別(system,global,local)都會重寫上一個級別的配置。如果 /etc/gitconfig
當中配置了 core.editor
爲 emacs
,而 ~/.gitconfig
中配置的 core.editor
是 vi
,則最終生效的是 ~/.gitconfig
中的配置 vi
,以此類推。
下表總結了以上三個級別各自的命令參數及配置文件:
級別 | 參數 | 文件 |
---|---|---|
系統 | --system |
/etc/gitconfig |
用戶 | --global |
~/.gitconfig 或 ~/.config/git/config |
倉庫 | --local |
.git/config |
Git 的配置文件都是普通文本文件,所以你可以使用普通文本編輯器對配置文件進行修改,這會比運行
git config
命令容易得多。
基本配置
Git 提供了大量的配置項供你自定義它的非默認行爲,你可以在你喜愛的 Linux 終端上輸入 git config
之後按兩次 TAB
鍵並根據提示輸入 y
,列出所有的配置項。當然了,其中大部分的配置都有其特定的使用場景,本文將只關注 Git 通用的一部分配置,每一個配置項的詳細信息及注意事項可以參考:
-
或者參考本地手冊:
git config --help git help config
-
又或者使用
man
指令進行查閱:man git-config
在前面的內容中我們已經瞭解了 user.name
及 user.email
的配置,接下來我們再看幾個 Git 的常用配置。
core.editor
默認情況下,Git 使用當前系統環境變量(EDITOR
或者 VISUAL
)所定義的編輯器進行編輯,如果環境變量爲空,在 Linux 操作系統中還可以使用命令 update-alternative --config editor
查看當前系統配置的編輯器,比如:
$ update-alternative --config editor
There are 5 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/nano 40 manual mode
2 /usr/bin/code 0 manual mode
3 /usr/bin/emacs24 0 manual mode
4 /usr/bin/vim.basic 30 manual mode
5 /usr/bin/vim.tiny 15 manual mode
Press <enter> to keep the current choice[*], or type selection number:
在當前系統配置的默認編輯器爲 /bin/nano
,數字前面帶有 * 號的便是。如果你不希望使用系統默認配置,那麼你可以使用 core.editor
進行配置:
git config --global core.editor vi
關於
--global
所代表的級別及應用範圍,上文有詳細的解釋,如果有疑惑的地方可以參考一下配置文件一節內容。
這樣的話,不管你當前系統的默認編輯器是什麼,Git 都會使用 vi
作爲編輯器來編輯信息。
alias.*
Git 配置中最實用的我認爲就是 alias.*
了,alias 的中文意思是“別名”,意思是可以使用另一個命名來代替本來的名稱,這樣你就可以使用一些簡寫來代替長長的命令行輸入了。比如,你可以使用 git st
代替 git status
命令(正如大多數人正在偷懶的做法一樣):
git config --global alias.st status
好了,此時你在命令行輸入 git st
試試效果如何:
git st
除了 git st
之外,你還可以繼續將更多的命令進行簡寫處理,比如使用 co
代替 checkout
,ci
代替 commit
,br
代替 branch
等:
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
這樣你需要拉分支的時候就可以簡寫爲:
git co -b new_branch
更多豐富的別名也可以參考廖雪峯 Git 教程 – 配置別名一文,文中提供了一些好玩的配置。比如配置了 unstage
用來撤銷緩衝區的修改,以及 last
用於顯示最後一次提交的日誌:
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
這樣當你需要撤銷緩衝區的修改的時候就可以直接使用 git unstage
來完成了:
git unstage thread.cpp
顯示最後一次提交信息也是,只需要使用 git last
來完成即可。
color.ui
Git 配置中另外一個非常重要的特性是顏色。Git 完全支持彩色終端的輸出,能夠使用不同顏色的可視化標記來達到快速信息分析的目的。顏色輸出可以通過 color.ui
的值來進行配置,有三個重要的參數值:
- always
- auto
- never
Git 1.8.4 及以後的版本默認參數是 auto
,意味着默認已經打開顏色支持;而 Git 1.8.3 或之前的版本如果需要顏色支持的話,需要手動配置 color.ui
爲 auto
或 true
:
git config --global color.ui auto
core.excludesfile
指定忽略規則的文件,默認是 $XDG_CONFIG_HOME/git/ignore,如果 $XDG_CONFIG_HOME 未定義或者爲空,則使用 ~/.config/git/ignore
代替。例子,可以手動將 ~/.gitignore
指定爲忽略文件:
git config --global core.excludesfile ~/.gitignore
core.autocrlf
自動進行 CRLF 與 LF 的轉換,當你希望在工作區以 CRLF (\r\n)
作爲換行方式,而在 Git 倉庫中以 LF (\n)
作爲行結尾的時候設置爲 true,當設置成 input 時,則保留文件原始的行尾,不進行轉換。
列出配置信息
在配置文件一節中的內容提到,Git 會依次讀取三個級別(system,global,local)的配置文件信息,因爲配置文件都是普通文本文件,你可以直接使用編輯器打開查看,或者使用 Git 提供的 --list
進行查看:
git config --list
當不帶級別參數(--system
,--global
或 --local
)調用時,顯示的是當前生效的所有配置參數信息,以 key=value
的形式顯示,如:
$ git config --list
alias.st=status
alias.co=checkout
user.name=Your Name
user.email=[email protected]
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
當帶上級別參數調用時,顯示的即是對應級別的配置文件的所有信息:
命令 | 說明 |
---|---|
git config --system --list |
顯示 /etc/gitconfig 文件 |
git config --global --list |
顯示 ~/.gitconfig 或 ~/.config/git/config 文件 |
git config --local --list |
顯示 .git/config 文件 |
git config --list |
顯示最終生效的配置信息 |
編輯配置信息
因爲 Git 的配置文件都是普通文本文件,所以你可以直接使用編輯器(如 vi
,emacs
)對配置文件進行操作,同時 Git 也提供了一個快捷的打開配置文件進行編輯的參數 --edit
,可謂是任君選擇:
git config --system --edit
將調用一個編輯器(參考 core.editor
內容)打開 /etc/gitconfig
配置文件進行編輯。但是必須保證用戶對 /etc/gitconfig
有寫權限,否則可能會在 vi
保存時提示:"/etc/gitconfig" E212: Can't open file for writing
的錯誤。
如果是普通用戶執行該語句,需要使用:
sudo git config --system --edit
git config --global --edit
調用一個編輯器打開 ~/.gitconfig
或者 ~/.config/git/config
配置文件進行編輯。
git config --edit
調用一個編輯器打開 .git/config
配置文件進行編輯,默認是 --local
級別。
命令 | 說明 |
---|---|
git config --system --edit |
編輯 /etc/gitconfig 文件 |
git config --global --edit |
編輯 ~/.gitconfig 或 ~/.config/git/config 文件 |
git config --edit |
編輯 .git/config 文件 |
刪除配置信息
因爲 Git 的配置文件都是普通文本文件,所以你可以直接使用編輯器(如 vi
,emacs
)對配置文件進行操作。如果刪除不再需要的配置項,只需調用編輯器打開配置文件,將配置項從文件移除,最後保存退出即可。同時你也可以使用 Git 提供的 --unset
指令來對配置文件進行操作。
比如,某個月黑風高的夜晚,你通過配置命令 git config --global core.editor emacs
給 Git 配置了一個酷炫的編輯器,此時在 ~/.gitconfig
文件中就會生成一條配置信息:
[core]
editor=emacs
然後有一天,你突發奇想(這種事你經常幹)希望 Git 使用系統默認配置的編輯器時,你可以使用 --unset
來完成這事了:
git config --global --unset core.editor
執行完上面的命令之後,本來在 ~/.gitconfig
文件中的 editor=emacs
便會被移除,是的,這與你手動刪除的效果是一樣的。如果不帶級別參數調用,默認是移除 .git/config
配置文件中的匹配項。
命令 | 說明 |
---|---|
git config --system --unset key |
移除在 /etc/gitconfig 中匹配 key 的一行 |
git config --global --unset key |
移除在 ~/.gitconfig 或 ~/.config/git/config 中匹配 key 的一行 |
git config --unset key |
移除在 .git/config 中匹配 key 的一行 |
參考文檔
[1] Pro Git
[2] git-config
[3] Git教程 - 廖雪峯的官方網站
[4] git config --help
[5] man git-config