[英]Where do the settings in my Git configuration come from?
我注意到當我運行git config -l
時,我有兩個core.autocrlf
列表
$ git config -l
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=name
user.email=email@example.com
core.autocrlf=true
最后三個(從 user.name 開始)是我的C:\\users\\username\\.gitconfig
文件中唯一的。 其他的都是從哪里來的? 為什么 core.autocrlf 被列出兩次?
這是 MSysGit 1.8.3,我還安裝了 Sourcetree(Windows 7)。 在 Sourcetree 中,我取消選中“允許 Sourcetree 修改您的全局 Git 配置文件”
Git 檢查配置文件的四個位置:
.gitconfig
文件。.gitconfig
文件位於~/.gitconfig
。$XDG_CONFIG_HOME/git/config
或$HOME/.config/git/config
。.git/config
。設置按以下順序級聯,每個文件添加或覆蓋其上方文件中定義的設置。
您可以使用以下命令查看每個文件的定義:
# System, applies to entire machine and all users
$ git config --system --list
$ git config --system --edit
# User defined
$ git config --global --list
$ git config --global --edit
您可以通過打開該存儲庫的文件.git/config
來查看特定於存儲庫的文件定義的內容。
如果您在 Windows 上使用 MSysGit,如果您在 Windows 命令提示符下使用echo %homepath%
,您可能會在%homepath%
指向的地方找到您的用戶~/.gitconfig
文件。
來自git config
的文檔:
如果未使用
--file
明確設置,則git config
將在四個文件中搜索配置選項:
$(prefix)/etc/gitconfig
系統范圍的配置文件。
$XDG_CONFIG_HOME/git/config
第二個特定於用戶的配置文件。 如果
$XDG_CONFIG_HOME
未設置或為空,則將使用$HOME/.config/git/config
。 此文件中設置的任何單值變量都將被~/.gitconfig
任何內容覆蓋。 如果您有時使用舊版本的 Git,最好不要創建此文件,因為最近才添加了對該文件的支持。
~/.gitconfig
用戶特定的配置文件。 也稱為“全局”配置文件。
$GIT_DIR/config
存儲庫特定的配置文件。
如果沒有給出更多選項,所有讀取選項將讀取所有這些可用文件。 如果全局或系統范圍的配置文件不可用,它們將被忽略。 如果存儲庫配置文件不可用或不可讀,
git config
將退出並顯示非零錯誤代碼。 但是,在任何情況下都不會發出錯誤消息。文件按上面給出的順序讀取,發現的最后一個值優先於之前讀取的值。 當采用多個值時,將使用來自所有文件的鍵的所有值。
默認情況下,所有寫入選項都將寫入存儲庫特定的配置文件。 請注意,這也會影響
--unset
--replace-all
和--unset
等選項。git config
一次只會更改一個文件。您可以通過命令行選項或環境變量覆蓋這些規則。
--global
和--system
選項將分別將使用的文件限制為全局或系統范圍的文件。GIT_CONFIG
環境變量具有類似的效果,但您可以指定任何您想要的文件名。
使用 git 2.8,您不必再猜測哪個配置已設置在何處! (2016 年 3 月)
參見提交 70bd879 、 提交 473166b 、 提交 7454ee3 、 提交 7454ee3 (2016 年 2 月 19 日)、 提交 473166b 、 提交 7454ee3 (2016 年 2 月 19 日)、 提交 7454ee3 (2016 年 2 月 19 日)、 提交 7454ee3 (2016 年 2 月 19 日) ( larsxschneider
2016 年 2 月 17 日)和提交) 。
(由Junio C gitster
合並-- gitster
--在dd0f567 提交中,2016 年 2 月 26 日)
配置:添加“
--show-origin
”選項以打印配置值的來源如果使用“
git config
”(例如通過--get
、--get-all
、--get-regexp
或--list
標志)查詢配置值,則有時很難找到定義值的配置文件.教 '
git config
' '--show-origin
' 選項為每個打印值打印源配置文件。
git config
手冊頁現在將指示:
--show-origin:
使用源類型(文件、標准輸入、blob、命令行)和實際源(配置文件路徑、ref 或 blob id,如果適用)增加所有查詢配置選項的輸出。
例如:
git config --list --show-origin
那將返回:
file:$HOME/.gitconfig user.global=true
file:$HOME/.gitconfig user.override=global
file:$HOME/.gitconfig include.path=$INCLUDE_DIR/absolute.include
file:$INCLUDE_DIR/absolute.include user.absolute=include
file:.git/config user.local=true
file:.git/config user.override=local
file:.git/config include.path=../include/relative.include
file:.git/../include/relative.include user.relative=include
command line: user.cmdline=true
git config --show-origin --get-all core.autocrlf
file:"D:\\prgs\\git\\latest\\mingw64/etc/gitconfig" true
file:C:/Users/vonc/.gitconfig false
在 Git 2.26(2020 年第一季度)中,您可以添加--show-scope
選項:
git config -l --show-origin --show-scope
在之前為 Windows安裝了Git並隨后將其卸載后,我發現在C:\\Users\\All Users\\Git\\config
安裝了一個配置文件,這是一個系統級配置文件,它會持續存在並將影響任何未來的 MinGW32 Git 包(就我而言,我正在運行我公司提供的便攜式 MinGW32 Git 包)。 當我跑
git config --system --edit
它會向我顯示位於mingw32/etc/gitconfig
的系統配置文件,但它仍然會從第一個位置加載值。 這顯示為嘗試使用Git LFS時配置值發生沖突的警告。
WARNING: These git config values clash:
git config "http.sslcainfo" = "C:/Users/foo/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt"
git config "http.sslcainfo" = "/ssl/certs/ca-bundle.crt"
(注意:這也可能是 LFS 警告過於自信的情況, #861 )
您可以使用--show-origin
來找出配置的來源。
Windows 版 Git 中的配置文件優先級:
...
$PROGRAMDATA/Git/config
::
(僅限 Windows)與其他 Git 實現共享的系統范圍的配置文件。 通常$PROGRAMDATA
指向C:\\ProgramData
。
$(prefix)/etc/gitconfig
::
系統范圍的配置文件。 (僅限 Windows)此文件僅包含特定於此 Windows 版 Git 安裝的設置,不應與其他 Git 實現(如 JGit、libgit2)共享。--system
將選擇此文件。
$XDG_CONFIG_HOME/git/config
::
第二個特定於用戶的配置文件。 如果$XDG_CONFIG_HOME
未設置或為空,則將使用$HOME/.config/git/config
。 此文件中設置的任何單值變量都將被~/.gitconfig
任何內容覆蓋。 如果您有時使用舊版本的 Git,最好不要創建此文件,因為最近才添加了對該文件的支持。
~/.gitconfig
::
用戶特定的配置文件。 也稱為“全局”配置文件。
$GIT_DIR/config
::
存儲庫特定的配置文件。...
文件按上面給出的順序讀取,發現的最后一個值優先於之前讀取的值。
...
來源: https : //github.com/git-for-windows/git/blob/master@%7B2018-01-07%7D/Documentation/git-config.txt#L231
$PROGRAMDATA
是一個環境變量。 您可以像這樣獲取這些變量的值:
在 Git Bash 中,您需要使用echo "$ProgramData"
。 在 CMD 中,您需要使用echo %PROGRAMDATA%
。 請注意,Git Bash 顯然假裝環境變量區分大小寫。
什么是$(prefix)
?
前綴是安裝東西的頂級目錄。 在 Windows 版 Git 中,它是<some-path>/mingw64
或<some-path>/mingw32
。
除了我在此處介紹的git config -l --show-origin
和 git 2.8(2016 年 3 月)之外,您現在還擁有 Git 2.26(2020 年第一季度)
git config -l --show-scope
# you can combine both options:
git config -l --show-origin --show-scope
git config
學會了顯示每個配置設置來自哪個“ scope
”,除了在哪個文件中。
請參閱提交 145d59f , 提交 9a83d08 , 提交 e37efa4 , 提交 5c105a8 , 提交 6766e41 , 提交 6dc905d , 提交 a5cb420 (2020 年 2 月 10 日),以及提交 417be08 (2020 年 2 月 10 日), 提交 417be07 ee23 , 提交2020 年 4 月29日 29 年 3 月29日馬修 29日29日提交 29日29日 2009 年 3 月ROGERSM94
(由Junio C gitster
合並-- gitster
-- in commit 5d55554 ,2020 年 2 月 17 日)
config
: 添加“--show-scope”以打印配置值的范圍簽字人:馬修·羅傑斯
當用戶使用
--show-origin
查詢配置值時,通常很難確定給定值的實際“scope
”(local
、global
等)僅基於原始文件。教 'git config' '
--show-scope
' 選項打印所有顯示的配置值的范圍。請注意,我們永遠不應該看到任何“子模塊”范圍,因為它只會在解析“.gitmodules”文件時被
submodule-config.c
使用。
例子:
git config -l --show-scope
global user.global=true
global user.override=global
global include.path=$INCLUDE_DIR/absolute.include
global user.absolute=include
local user.local=true
local user.override=local
local include.path=../include/relative.include
local user.relative=include
git config -l
顯示所有從系統、全局和本地繼承的值。
所以你有另一個配置文件與你的用戶定義的.gitconfig
文件一起加載。
Windows 的完整答案(即已接受答案的 Windows 版本):
與 Linux 一樣,Windows 有四個級別的配置文件/設置,其中三個是直接等效的。 需要注意的重要事項是另一個 - “所有應用程序/用戶” - 特別是因為這是安裝程序設置值的地方,例如“core.autocrlf = true”,但無法從命令行訪問所以它會引起混亂。
所有應用程序和用戶
如果您安裝了多個 Git 應用程序,這就像“系統”設置的共享版本。 沒有 'git config' 命令來訪問這些,但它們仍然影響設置的最終結果。
配置文件位置:
C:\\ProgramData\\Git\\config
(請注意,在舊版本的 Windows 上,“ProgramData”是“所有用戶”。)
系統
配置文件位置:C:/Program Files/Git/mingw64/etc/gitconfig
$ git config --system --list
用戶
配置文件位置:%USERPROFILE%.gitconfig(這解析為'C:/Users/<username>')
$ git config --global --list
存儲庫
配置文件位置:【當前倉庫目錄】/.git/config
$ git config --local --list
在 Windows 7(可能與 Windows 10 相同或相似)上,對於 Visual Studio 和 Git 命令行,您的全局配置位於:
%USERPROFILE%\.gitconfig
(點在文件名前面)
但是Sourcetree並不尊重這個,至少在Git Embedded模式下是這樣,配置在:
%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig
(文件名前沒有點)
(我需要更新這兩個文件以修改 Git 命令和 Sourcetree 的全局 Git 設置。)
另一個有趣的部分。 Git 鈎子配置在AppData\\Local\\...
位置工作,但經過Process Monitor 的更多研究后,我注意到 Sourcetree 也以某種方式從公司映射驅動器為我的用戶加載全局。
這沒什么意義,因為很少有應用程序會查找此位置,但 Sourcetree 以某種方式這樣做,因此如果您無法在 Sourcetree 的每個位置設置中使用它,請運行 Process Monitor 並創建規則以僅記錄包含 gitconfig 的路徑,然后您在網絡映射用戶目錄的情況下,可以找到您的全局配置的真正位置。
這甚至可能不是 Sourcetree 的錯,正如我現在看到的,當我寫這篇文章時,git.exe 正在加載它,但這僅發生在 Sourcetree 執行的 git.exe 上,而直接命令行 Git 使用%USERPROFILE%\\.gitconfig
最后,我從 Process Monitor 獲取所有結果,將其輸入 SQL Server 並運行查詢以獲得不同的結果(沒有特定的執行順序只是按路徑排序):
我不知道這些配置是如何相互關聯的,但我知道有些會覆蓋另一個,有些設置在一個位置工作,有些在另一個位置工作。
上面的列表由 Sourcetree 調用,再次使用 Git 直接命令行似乎與%USERPROFILE%\\.gitconfig
一起工作正常,這不在此列表中,但它看起來像這樣(在 Windows 7 上) C:\\Users\\pawel.cioch\\.gitconfig
如果您想查找實際文件位置,它將在您的主目錄中。
它被隱藏並以“.”開頭。
因此,如果您使用的是 Mac,則可以在終端中cd ~ && open .gitconfig
或使用您喜歡的文本編輯器打開它,例如cd ~ && atom .gitconfig
。
在 mac 中,它是/usr/local/git/etc/gitconfig
-_-
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.