92

core.autocrlf実行時に2 つのリストがあることに気付きましたgit config -l

$ 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

C:\users\username\.gitconfigこれらの最後の 3 つ (user.name から下) は、私のファイルにある唯一のものです。他のすべてのものはどこから来ていますか?core.autocrlf が 2 回リストされているのはなぜですか?

これは MSysGit 1.8.3 であり、Sourcetree もインストールされています (Windows 7)。Sourcetree で、「Sourcetree にグローバル Git 構成ファイルの変更を許可する」のチェックを外しました。

4

10 に答える 10

104

Git は構成ファイルの 4 つの場所をチェックします。

  1. マシンのシステム.gitconfigファイル。
  2. にあるユーザー.gitconfigファイル~/.gitconfig
  3. $XDG_CONFIG_HOME/git/configまたはにある 2 番目のユーザー固有の構成ファイル$HOME/.config/git/config
  4. ローカル リポジトリの構成ファイル.git/config

設定は次の順序でカスケードされ、各ファイルはその上のファイルで定義された設定を追加またはオーバーライドします。

  1. システム構成。
  2. ユーザー構成。
  3. リポジトリ固有の構成。

次のコマンドを使用して、各ファイルが定義した内容を確認できます。

# 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%

ドキュメントからgit config:

で明示的に設定されていない場合、構成オプションを検索する--file4 つのファイルがあります。git config

  • $(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これは、 や などのオプションにも影響することに注意してください --unsetgit config 一度に 1 つのファイルのみを変更します。

これらのルールは、コマンド ライン オプションまたは環境変数によってオーバーライドできます。およびオプションは--global--system使用するファイルをそれぞれグローバル ファイルまたはシステム全体のファイルに制限します。環境変数にも同様のGIT_CONFIG効果がありますが、任意のファイル名を指定できます。

于 2013-07-19T23:03:52.717 に答える
71

git 2.8 では、どの設定がどこに設定されているかを推測する必要はもうありません! (2016年3月)

コミット 70bd879、コミット473166bコミット 7454ee3コミット 7454ee3 (2016 年 2 月 19 日)、コミット 473166bコミット 7454ee3 (2016 年 2 月 19 日)、コミット 7454ee3 (2016 年 2 月 19 日)、およびコミット a0578e0 (larsxschneider 2016 年 2 月 17 日) を参照してください。 .
( 2016 年 2 月 26 日にコミット dd0f567Junio C Hamanoによってマージされました)gitster

config: ' --show-origin' オプションを追加して、構成値の元を出力します

構成値が ' ' を使用して (たとえば、、、、またはフラグgit configを介して--get) 照会される場合、値が定義された構成ファイルを見つけるのが難しい場合があります。--get-all--get-regexp--list

表示される値ごとにソース構成ファイルを表示するオプションをgit config' '教えます。--show-origin

git configman ページには次のように表示されます。

--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

wisbuckyのコメントによると、1 つの設定については次のようになります。

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 年第 1 四半期) では、次のオプションを追加でき--show-scopeます。

git config -l --show-origin --show-scope
于 2016-02-27T14:28:01.173 に答える
10

以前にGit for Windowsをインストールし、その後アンインストールした後、システム レベルの構成ファイルがインストールされている構成ファイルが存在することがわかりました。この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 )

于 2015-12-12T00:39:34.810 に答える
3

git config -lシステム、グローバル、およびローカルから継承されたすべての値を表示します。

したがって、ユーザー定義ファイルと一緒にロードされている別の構成ファイルがどこかにあり.gitconfigます。

于 2013-07-19T23:05:50.947 に答える
-1

実際のファイルの場所を見つけたい場合は、ホーム ディレクトリになります。

これは非表示で、先頭に「.」が付きます。

したがって、Mac を使用している場合は、ターミナルcd ~ && open .gitconfigで、お気に入りのテキスト エディター ( cd ~ && atom .gitconfig.

于 2017-11-17T06:48:39.040 に答える