W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你在?起步?中看到,可以用?git config
?配置 Git。 首先要做的事情就是設(shè)置你的名字和郵件地址:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
現(xiàn)在,你會(huì)了解到許多更有趣的選項(xiàng),并用類似的方式來(lái)定制 Git。
首先,快速回憶下:Git 使用一系列配置文件來(lái)保存你自定義的行為。 它首先會(huì)查找/etc/gitconfig
?文件,該文件含有系統(tǒng)里每位用戶及他們所擁有的倉(cāng)庫(kù)的配置值。 如果你傳遞--system
?選項(xiàng)給?git config
,它就會(huì)讀寫該文件。
接下來(lái) Git 會(huì)查找每個(gè)用戶的?~/.gitconfig
?文件(或者?~/.config/git/config
?文件)。 你可以傳遞?--global
?選項(xiàng)讓 Git 讀寫該文件。
最后 Git 會(huì)查找你正在操作的版本庫(kù)所對(duì)應(yīng)的 Git 目錄下的配置文件(.git/config
)。 這個(gè)文件中的值只對(duì)該版本庫(kù)有效。
以上三個(gè)層次中每層的配置(系統(tǒng)、全局、本地)都會(huì)覆蓋掉上一層次的配置,所以?.git/config
中的值會(huì)覆蓋掉?/etc/gitconfig
?中所對(duì)應(yīng)的值。
NOTE
Git 的配置文件是純文本的,所以你可以直接手動(dòng)編輯這些配置文件,輸入合乎語(yǔ)法的值。 但是運(yùn)行?
git config
?命令會(huì)更簡(jiǎn)單些。
Git 能夠識(shí)別的配置項(xiàng)分為兩大類:客戶端和服務(wù)器端。 其中大部分屬于客戶端配置 —— 可以依你個(gè)人的工作偏好進(jìn)行配置。 盡管 Git 支持的選項(xiàng)?繁多,但其中大部分僅僅在某些罕見(jiàn)的情況下有意義。 我們只講述最平常和最有用的選項(xiàng)。 如果想得到你當(dāng)前版本的 Git 支持的選項(xiàng)列表,請(qǐng)運(yùn)行
$ man git-config
這個(gè)命令列出了所有可用的選項(xiàng),以及與之相關(guān)的介紹。 你也可以在??找到同樣的內(nèi)容。
core.editor
默認(rèn)情況下,Git 會(huì)調(diào)用環(huán)境變量($VISUAL
?或?$EDITOR
)設(shè)置的任意文本編輯器,如果沒(méi)有設(shè)置,會(huì)調(diào)用?vi
?來(lái)創(chuàng)建和編輯你的提交以及標(biāo)簽信息。 你可以使用?core.editor
?選項(xiàng)來(lái)修改默認(rèn)的編輯器:
$ git config --global core.editor emacs
現(xiàn)在,無(wú)論你定義了什么終端編輯器,Git 都會(huì)調(diào)用 Emacs 編輯信息。
commit.template
如果把此項(xiàng)指定為你的系統(tǒng)上某個(gè)文件的路徑,當(dāng)你提交的時(shí)候, Git 會(huì)使用該文件的內(nèi)容作為提交的默認(rèn)信息。 例如:假設(shè)你創(chuàng)建了一個(gè)叫?~/.gitmessage.txt
?的模板文件,類似這樣:
subject line
what happened
[ticket: X]
要想讓 Git 把它作為運(yùn)行?git commit
?時(shí)顯示在你的編輯器中的默認(rèn)信息, 如下設(shè)置commit.template
:
$ git config --global commit.template ~/.gitmessage.txt
$ git commit
然后當(dāng)你提交時(shí),編輯器中就會(huì)顯示如下的提交信息占位符:
subject line
what happened
[ticket: X]
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: lib/test.rb
#
~
~
".git/COMMIT_EDITMSG" 14L, 297C
如果你的團(tuán)隊(duì)對(duì)提交信息有格式要求,可以在系統(tǒng)上創(chuàng)建一個(gè)文件,并配置 Git 把它作為默認(rèn)的模板,這樣可以更加容易地使提交信息遵循格式。
core.pager
該配置項(xiàng)指定 Git 運(yùn)行諸如?log
?和?diff
?等命令所使用的分頁(yè)器。 你可以把它設(shè)置成用?more
或者任何你喜歡的分頁(yè)器(默認(rèn)用的是?less
),當(dāng)然也可以設(shè)置成空字符串,關(guān)閉該選項(xiàng):
$ git config --global core.pager ''
這樣不管命令的輸出量多少,Git 都會(huì)在一頁(yè)顯示所有內(nèi)容。
user.signingkey
如果你要?jiǎng)?chuàng)建經(jīng)簽署的含附注的標(biāo)簽(正如?簽署工作?所述),那么把你的 GPG 簽署密鑰設(shè)置為配置項(xiàng)會(huì)更好。 如下設(shè)置你的密鑰 ID:
$ git config --global user.signingkey <gpg-key-id>
現(xiàn)在,你每次運(yùn)行?git tag
?命令時(shí),即可直接簽署標(biāo)簽,而無(wú)需定義密鑰:
$ git tag -s <tag-name>
core.excludesfile
正如?忽略文件?所述,你可以在你的項(xiàng)目的?.gitignore
?文件里面規(guī)定無(wú)需納入 Git 管理的文件的模板,這樣它們既不會(huì)出現(xiàn)在未跟蹤列表,也不會(huì)在你運(yùn)行?git add
?后被暫存。
不過(guò)有些時(shí)候,你想要在你所有的版本庫(kù)中忽略掉某一類文件。 如果你的操作系統(tǒng)是 OS X,很可能就是指?.DS_Store
。 如果你把 Emacs 或 Vim 作為首選的編輯器,你肯定知道以?~
?結(jié)尾的臨時(shí)文件。
這個(gè)配置允許你設(shè)置類似于全局生效的?.gitignore
?文件。 如果你按照下面的內(nèi)容創(chuàng)建一個(gè)~/.gitignore_global
?文件:
*~
.DS_Store
……然后運(yùn)行?git config --global core.excludesfile ~/.gitignore_global
,Git 將把那些文件永遠(yuǎn)地拒之門外。
help.autocorrect
假如你打錯(cuò)了一條命令,會(huì)顯示:
$ git chekcout master
git:'chekcout' 不是一個(gè) git 命令。參見(jiàn) 'git --help'。
您指的是這個(gè)么?
checkout
Git 會(huì)嘗試猜測(cè)你的意圖,但是它不會(huì)越俎代庖。 如果你把?help.autocorrect
?設(shè)置成 1,那么只要有一個(gè)命令被模糊匹配到了,Git 會(huì)自動(dòng)運(yùn)行該命令。
$ git chekcout master
警告:您運(yùn)行一個(gè)不存在的 Git 命令 'chekcout'。繼續(xù)執(zhí)行假定您要要運(yùn)行的
是 'checkout'
在 0.1 秒鐘后自動(dòng)運(yùn)行...
注意提示信息中的“0.1 秒”。help.autocorrect
?接受一個(gè)代表十分之一秒的整數(shù)。 所以如果你把它設(shè)置為 50, Git 將在自動(dòng)執(zhí)行命令前給你 5 秒的時(shí)間改變主意。
Git 充分支持對(duì)終端內(nèi)容著色,對(duì)你憑肉眼簡(jiǎn)單、快速分析命令輸出有很大幫助。 你可以設(shè)置許多的相關(guān)選項(xiàng)來(lái)滿足自己的偏好。
color.ui
Git 會(huì)自動(dòng)著色大部分輸出內(nèi)容,但如果你不喜歡花花綠綠,也可以關(guān)掉。 要想關(guān)掉 Git 的終端顏色輸出,試一下這個(gè):
$ git config --global color.ui false
這個(gè)設(shè)置的默認(rèn)值是?auto
,它會(huì)著色直接輸出到終端的內(nèi)容;而當(dāng)內(nèi)容被重定向到一個(gè)管道或文件時(shí),則忽略著色功能。
你也可以設(shè)置成?always
,來(lái)忽略掉管道和終端的不同,即在任何情況下著色輸出。 你很少會(huì)這么設(shè)置,在大多數(shù)場(chǎng)合下,如果你想在被重定向的輸出中插入顏色碼,可以傳遞?--color
?標(biāo)志給 Git 命令來(lái)強(qiáng)制它這么做。 默認(rèn)設(shè)置就已經(jīng)能滿足大多數(shù)情況下的需求了。
color.*
要想具體到哪些命令輸出需要被著色以及怎樣著色,你需要用到和具體命令有關(guān)的顏色配置選項(xiàng)。 它們都能被置為?true
、false
?或?always
:
color.branch
color.diff
color.interactive
color.status
另外,以上每個(gè)配置項(xiàng)都有子選項(xiàng),它們可以被用來(lái)覆蓋其父設(shè)置,以達(dá)到為輸出的各個(gè)部分著色的目的。 例如,為了讓?diff
?的輸出信息以藍(lán)色前景、黑色背景和粗體顯示,你可以運(yùn)行
$ git config --global color.diff.meta "blue black bold"
你能設(shè)置的顏色有:normal
、black
、red
、green
、yellow
、blue
、magenta
、cyan
或?white
。 正如以上例子設(shè)置的粗體屬性,想要設(shè)置字體屬性的話,可以選擇包括:bold
、dim
、ul
(下劃線)、blink
、reverse
(交換前景色和背景色)。
雖然 Git 自己內(nèi)置了一個(gè)?diff
?實(shí)現(xiàn),而且到目前為止我們一直在使用它,但你能夠用一個(gè)外部的工具替代它。 除此以外,你還能設(shè)置一個(gè)圖形化的工具來(lái)合并和解決沖突,從而不必自己手動(dòng)解決。 這里我們以一個(gè)不錯(cuò)且免費(fèi)的工具 —— Perforce 圖形化合并工具(P4Merge) —— 來(lái)展示如何用一個(gè)外部的工具來(lái)合并和解決沖突。
P4Merge 可以在所有主流平臺(tái)上運(yùn)行,所以安裝上應(yīng)該沒(méi)有什么困難。 在這個(gè)例子中,我們使用的路徑名可以直接應(yīng)用在 Mac 和 Linux 上;在 Windows 上,/usr/local/bin
?需要被改為你的環(huán)境中可執(zhí)行文件所在的目錄路徑。
首先, 從??下載 P4Merge。 接下來(lái),你要編寫一個(gè)全局包裝腳本來(lái)運(yùn)行你的命令。 我們會(huì)使用 Mac 上的路徑來(lái)指定該腳本的位置,在其他系統(tǒng)上,它將是?p4merge
?二進(jìn)制文件所在的目錄。 創(chuàng)建一個(gè)名為?extMerge
?的腳本包裝 merge 命令,讓它把參數(shù)轉(zhuǎn)發(fā)給 p4merge 二進(jìn)制文件:
$ cat /usr/local/bin/extMerge
#!/bin/sh
/Applications/p4merge.app/Contents/MacOS/p4merge $*
包裝 diff 命令的腳本首先確保傳遞了七個(gè)參數(shù)過(guò)來(lái),隨后把其中兩個(gè)轉(zhuǎn)發(fā)給包裝了 merge 的腳本。 默認(rèn)情況下, Git 傳遞以下參數(shù)給?diff
:
path old-file old-hex old-mode new-file new-hex new-mode
由于你僅僅需要?old-file
?和?new-file
?參數(shù),由包裝 diff 的腳本來(lái)轉(zhuǎn)發(fā)它們吧。
$ cat /usr/local/bin/extDiff
#!/bin/sh
[ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"
你也需要確保這些腳本具有可執(zhí)行權(quán)限:
$ sudo chmod +x /usr/local/bin/extMerge
$ sudo chmod +x /usr/local/bin/extDiff
現(xiàn)在你可以修改配置文件來(lái)使用你自定義的合并和比較工具了。 這將涉及許多自定義設(shè)置:merge.tool
?通知 Git 該使用哪個(gè)合并工具,?mergetool.<tool>.cmd
?規(guī)定命令運(yùn)行的方式,mergetool.<tool>.trustExitCode
?會(huì)通知 Git 程序的返回值是否表示合并操作成功,diff.external
?通知 Git 該用什么命令做比較。 因此,你可以運(yùn)行以下四條配置命令:
$ git config --global merge.tool extMerge
$ git config --global mergetool.extMerge.cmd \
'extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
$ git config --global mergetool.extMerge.trustExitCode false
$ git config --global diff.external extDiff
或編輯你的?~/.gitconfig
?文件,添加以下各行:
[merge]
tool = extMerge
[mergetool "extMerge"]
cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
trustExitCode = false
[diff]
external = extDiff
待一切設(shè)置妥當(dāng)后,如果你像這樣運(yùn)行 diff 命令:
$ git diff 32d1776b1^ 32d1776b1
Git 將啟動(dòng) P4Merge,而不是在命令行輸出比較的結(jié)果,就像這樣:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: