core.autocrlf
を実行すると、git config -l
のリストが2つあることに気付きました
$ 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
[email protected]
core.autocrlf=true
最後の3つ(user.nameから)は、私のc:\users\username\.gitconfig
ファイル内の唯一のものです。他のすべてのものはどこから来たのですか? core.autocrlfが2回リストされるのはなぜですか?
これはmsysgit 1.8.3であり、SourceTreeもインストールされています(Windows 7)。 SourceTreeでは、「SourceTreeがグローバルGit構成ファイルを変更できるようにする」のチェックを外しました。
Gitは、構成ファイルの4つの場所をチェックします。
.gitconfig
ファイル。.gitconfig
ファイルは~/.gitconfig
にあります。$XDG_CONFIG_HOME/git/config
または$HOME/.config/git/config
にある2番目のユーザー固有の構成ファイル。.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コマンドプロンプトから~/.gitconfig
を使用すると、%homepath%
が指すユーザーecho %homepath%
ファイルが見つかるでしょう。
--file
で明示的に設定されていない場合、git config
が構成オプションを検索する4つのファイルがあります。
$(prefix)/etc/gitconfig
システム全体の構成ファイル。
$XDG_CONFIG_HOME/git/config
2番目のユーザー固有の構成ファイル。
$XDG_CONFIG_HOME
が設定されていないか空の場合、$HOME/.config/git/config
が使用されます。このファイルに設定された単一値の変数は、~/.gitconfig
にあるものによって上書きされます。このファイルのサポートはごく最近追加されたため、古いバージョンのGitを時々使用する場合は、このファイルを作成しないことをお勧めします。
~/.gitconfig
ユーザー固有の構成ファイル。 「グローバル」構成ファイルとも呼ばれます。
$GIT_DIR/config
リポジトリ固有の構成ファイル。
さらにオプションを指定しない場合、すべての読み取りオプションは、使用可能なこれらのファイルをすべて読み取ります。グローバルまたはシステム全体の構成ファイルが利用できない場合、それらは無視されます。リポジトリー構成ファイルが使用不可または読み取り可能でない場合、
git config
はゼロ以外のエラーコードで終了します。ただし、どちらの場合もエラーメッセージは発行されません。ファイルは上記の順序で読み取られ、最後に見つかった値が先に読み取られた値よりも優先されます。複数の値が取得されると、すべてのファイルのキーのすべての値が使用されます。
すべての書き込みオプションは、デフォルトでリポジトリ固有の構成ファイルに書き込みます。これは、
--replace-all
や--unset
などのオプションにも影響することに注意してください。git config
は一度に1つのファイルのみを変更します。これらのルールは、コマンドラインオプションまたは環境変数によって上書きできます。
--global
オプションと--system
オプションは、使用するファイルをそれぞれグローバルファイルまたはシステム全体のファイルに制限します。GIT_CONFIG
環境変数にも同様の効果がありますが、任意のファイル名を指定できます。
Git 2.8では、どの設定がどこに設定されているかを推測する必要がなくなりました! (2016年3月)
commit 70bd879 、 commit 473166b 、 commit 7454ee 、 commit 7454ee (2016年2月19日)、 コミット473166b 、 コミット7454ee (2016年2月19日)、 コミット7454ee (2016年2月19日)、および コミットa0578e (2016年2月17日) ) Lars Schneider(larsxschneider
) によって。
( 浜野潤夫-gitster
- in commit dd0f567 、2016年2月26日)
config: '
--show-Origin
'オプションを追加して、構成値の起点を出力します'
git config
'を使用して構成値を照会する場合(たとえば、--get
、--get-all
、--get-regexp
、または--list
フラグを使用して)、検索が難しい場合があります。値が定義された構成ファイル。'
git config
'に '--show-Origin
'オプションを教えて、印刷されたすべての値のソース構成ファイルを印刷します。
git config
manページ は以下を示します。
--show-Origin:
Originタイプ(ファイル、標準入力、blob、コマンドライン)と実際のOrigin(構成ファイルパス、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
以前に 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 )
Git config -lは、システム、グローバル、ローカルから継承されたすべての値を表示します。
したがって、ユーザー定義の.gitconfigとともにロードされる別の構成ファイルがどこかにあります。
--show-Origin
を使用して、構成がどこから来たかを調べることができます。
Git for Windowsの設定ファイルの優先度:
...
$PROGRAMDATA/Git/config
::
(Windowsのみ)他のGit実装と共有されるシステム全体の構成ファイル。通常、$PROGRAMDATA
はC:\ProgramData
を指します。
$(prefix)/etc/gitconfig
::
システム全体の構成ファイル。 (Windowsのみ)このファイルには、Git for Windowsのこのインストールに固有の設定のみが含まれ、JGit、libgit2などの他のGit実装と共有しないでください。--system
はこのファイルを選択します。
$XDG_CONFIG_HOME/git/config
::
2番目のユーザー固有の構成ファイル。$XDG_CONFIG_HOME
が設定されていないか空の場合、$HOME/.config/git/config
が使用されます。このファイルに設定された単一値の変数は、~/.gitconfig
にあるものによって上書きされます。このファイルのサポートはごく最近追加されたため、古いバージョンのGitを時々使用する場合は、このファイルを作成しないことをお勧めします。
~/.gitconfig
::
ユーザー固有の構成ファイル。 「グローバル」構成ファイルとも呼ばれます。
$GIT_DIR/config
::
リポジトリ固有の構成ファイル。...
ファイルは上記の順序で読み取られ、最後に見つかった値が先に読み取られた値よりも優先されます。
...
$PROGRAMDATA
は環境変数です。これらの変数の値は次のように取得できます。
Git Bashでは、echo "$ProgramData"
を使用する必要があります。 CMDでは、echo %PROGRAMDATA%
を使用する必要があります。 Git Bashは、環境変数では大文字と小文字が区別されるように見えることに注意してください。
$(prefix)
とは何ですか?
プレフィックスは、物がインストールされるトップレベルのディレクトリです。 Git for Windowsでは、<some-path>/mingw64
または<some-path>/mingw32
のいずれかです。
私は、Windowsに対する完全な答え(つまり、受け入れられた答えのWindowsバージョン)はないと思うので、別の答えを追加しています。
Linuxと同様に、Windowsにも4つのレベルの構成ファイル/設定があり、3つは直接同等です。注意すべき重要なことは、もう1つ-「すべてのアプリ/ユーザー」-特にインストーラーが値を設定する場所であるためです。 'core.autocrlf = true'、それでもコマンドラインからアクセスできないため、混乱が生じます。
すべてのアプリ/ユーザー
これは、複数のgitアプリがインストールされている場合の「システム」設定の共有バージョンのようなものです。これらにアクセスするための「git config」コマンドはありませんが、設定の最終結果に影響を及ぼします。
構成ファイルの場所:
C:\ ProgramData\Git\config
(Windowsの古いバージョンでは、「ProgramData」は「All Users」でした)
システム
構成ファイルの場所:
C:/ Program Files/Git/mingw64/etc/gitconfig
$ git config --system --list
ユーザー
構成ファイルの場所:
%USERPROFILE%.gitconfig
(これはc:/ Users/'に解決されます)
$ git config --global --list
レポ
構成ファイルの場所:
[現在のレポジトリディレクトリ] /。git/config
$ git config --local --list
Visual Studioおよびgitコマンドライン用のWindows 7(Windows 10でも同じまたは類似)の場合、グローバル構成は
%USERPROFILE%\.gitconfig
(ドットはファイルの前にあります)
しかし、これは少なくともGit EmbeddedモードではSourceTreeによって尊重されず、設定は
%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig
(ファイルの前にドットはありません)
[gitコマンドとSourceTreeのグローバルgit設定を変更するには、両方のファイルを更新する必要がありました]
別の楽しい部分。 Gitフックの設定はAppData\Local\...
の場所から機能していましたが、procmonを使用してさらに調査した結果、SourceTreeがユーザーの会社にマップされたドライブからグローバルを読み込んでいることに気付きました。この場所を参照するアプリケーションはほとんどないため、これはほとんど意味がありません.STで場所ごとの設定を行い、procmon.exeを実行し、gitconfigを含むパスのみを記録するルールを作成できない場合、STは何らかの方法でそうしますネットワークマップされたユーザーディレクトリの場合、本当にあなたのグローバル設定はどこにあります。これは、今書いているように、git.exeがそれをロードしていることを示しているように、これはSTの障害ではないかもしれませんが、これはSTによって実行されるgit.exeに対してのみ発生しますが、直接コマンドラインgitは%USERPROFILE%\.gitconfig
を使用します
最後に、procmonからすべての結果を取得し、SQLにフィードし、クエリを実行して個別の結果を取得しました(特定の実行順序はパスでソートされていません)。
これらの構成が互いにどのように関連するかはわかりませんが、ある場所から別の場所にあるいくつかの設定がいくつかの設定をオーバーライドすることは知っています。 そして上記のリストはSourceTreeによって呼び出されますが、再びgitの直接コマンドラインは%USERPROFILE%\.gitconfig
でうまく動作するようで、このリストにはありませんしかし、このようになります(Win7)c:\Users\pawel.cioch\.gitconfig