web-dev-qa-db-ja.com

git config:すべての変数とそのデフォルト値をリストします

show variablesで定義されている変数だけでなく、すべての変数を表示するMySQL my.iniコマンドと同様に、all構成変数のリストを見たいin gitwithwith default-values、and defined in the defined in my ~/.gitconfig

これは可能ですか?

29
Harry

それは議論されました 2013年のこのスレッドでセバスチャンシューベルト からのリクエスト、 ジェフキング(Peff 追加:

期待される出力は確かに問題ですが、問題はそれよりも根本的です:git configは、任意のオプションのデフォルトが何であるかを知りません

呼び出し側は、設定されていない値をどうするかを知っていると想定されます。これはgit configとは関係ありません。内部Cコードも同じように機能します。
実際のデフォルトは、必ずしもconfigで表現できるとは限りません。
たとえば、http.receivepackは、「未設定」を「true」または「false」のいずれかとは異なるものと見なしますが、設定するとそれらの1つしか得られないことがわかります。後者の2つの値。
他にもきっとあるはずです(たまたま今週に気づいたのですが)。

たとえば:gc.Prune

コードにオプションとその説明、可能な値、デフォルトの大きなテーブルがあり、それを使用してドキュメントを生成し、入力を検証した場合、世界はより良い場所になるという議論を確かに見ることができました。
しかし、誰もそのテーブルを作成してすべての呼び出し元を変換する手間をかけていません。そして Jakub(JakubNarębski) が述べたように、そのような中央のテーブルはgitと共に設定を保存する外部プログラムには何もできません。

要するに:

git configは、それが管理するオプションや値さえも知りませんが、ファイルとの間でやり取りするものを読み書きするための「ダム」フロントエンドです。


注:git configは commit 1771299(git 0.99.9a、2005年10月) で導入されました

異なるプログラムは異なる設定オプションに反応する可能性がありますが、認識できない設定オプション名に対しては常に「git_default_config()」の呼び出しにフォールバックする必要があります。

内部的には、同じPeffが commit 72549df、git 2.2.0-rc1、Nov. 2014 として最近使用したデフォルトの設定を読み込む方法があります。

Git-fetchプログラムを起動すると、git_configを呼び出してすべての設定を読み込みますが、コールバックはfetch.Pruneオプションのみを処理します。 git_default_configにはチェーンしません。

これは、効果があるコア構成をロードしない場合があることを意味します。たとえば、core.logAllRefUpdatesをロードしません。これは、裸のリポジトリでreflogを作成するかどうかに影響します。

フェッチの開始時にコア設定をロードしてみましょう。

commit 3e1dd17、git 1.7.7-rc1、Aug. 2011 のデフォルトの色設定での別の例を参照してください。

25
VonC

git config --global -lはグローバル変数またはgit config -lローカルリポジトリ変数

PS:質問を投稿してから2年が経ちましたが、同じことを探していたのでこの記事を読みました。かなり前に問題を解決した可能性があります。

21
Matteo Meil

このメソッドでは、your settings with withが取得されませんが、これは文書化された設定(および文書化されている場合はそのデフォルト)を取得する非常に堅実な方法です:

最初にソースリポジトリからドキュメントを取得します

svn export https://github.com/git/git/trunk/Documentation

または、svnがない場合、

curl -L https://api.github.com/repos/git/git/tarball/master | tar -xvzf- --strip-components=1 --wildcards --no-anchored 'Documentation/*'

ディレクトリを入力してください

cd Documentation

grepを開始します。 2つのバージョンがあります。1つは詳細、もう1つはコンパクトです(詳細が欠落している可能性があります)。 (一部)明確にするために、以下の長いフラグ名を使用します。

最初のコンパクトバージョン:

grep --initial-tab                  \
    --recursive                     \
    --binary-files=without-match    \
    --no-filename                   \
    --only-matching                 \
    --Perl-regexp                   \
    --null-data                     \
    --regexp='(?ms)(?:^[a-z][a-zA-Z]+\.[<>()*.a-zA-Z]+::\v+)+?(?:(?:\v|\h+\V+\v))+(?:\v|\Z)' 

より詳細なバージョンについては、単に--regexp=へのフラグ

(?ms)(?:^[a-z][a-zA-Z]+\.[<>()*.a-zA-Z]+::\v+)+?(?:(?:\v|\h+\V+\v))+(?:\+\v+(?:--\v+.+?--|[^+]\V+(?!::\v))+)*(?:\v|\Z)

拡大したのは

(?ms)
(?:
    ^[a-z][a-zA-Z]+\.
    [<>()*.a-zA-Z]+::\v+
)+?
   (?:
        (?:\v|\h+\V+\v)
    )+
    (?:
        \+\v+
        (?:
            --\v+
            .+?
            --
        |
            [^+]\V+(?!::\v)
        )+
    )*
(?:\v|\Z)

そして、これはすべて正規表現の抽出に基づいているため、これがいつか壊れる可能性があることは言うまでもありません(txtファイルドキュメントのフォーマットを変更した場合)。

いくつかのサンプル出力-すべてにデフォルト値があるわけではないことに注意してください:

core.hideDotFiles::
        (Windows-only) If true, mark newly-created directories and files whose
        name starts with a dot as hidden.  If 'dotGitOnly', only the `.git/`
        directory is hidden, but no other files starting with a dot.  The
        default mode is 'dotGitOnly'.

 core.precomposeUnicode::
        This option is only used by Mac OS implementation of Git.
        When core.precomposeUnicode=true, Git reverts the unicode decomposition
        of filenames done by Mac OS. This is useful when sharing a repository
        between Mac OS and Linux or Windows.
        (Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7).
        When false, file names are handled fully transparent by Git,
        which is backward compatible with older versions of Git.

 core.protectHFS::
        If set to true, do not allow checkout of paths that would
        be considered equivalent to `.git` on an HFS+ filesystem.
        Defaults to `true` on Mac OS, and `false` elsewhere.

 core.protectNTFS::
        If set to true, do not allow checkout of paths that would
        cause problems with the NTFS filesystem, e.g. conflict with
        8.3 "short" names.
        Defaults to `true` on Windows, and `false` elsewhere.

 core.fsmonitor::
        If set, the value of this variable is used as a command which
        will identify all files that may have changed since the
        requested date/time. This information is used to speed up git by
        avoiding unnecessary processing of files that have not changed.
        See the "fsmonitor-watchman" section of linkgit:githooks[5].

 core.trustctime::
        If false, the ctime differences between the index and the
        working tree are ignored; useful when the inode change time
        is regularly modified by something outside Git (file system
        crawlers and some backup systems).
        See linkgit:git-update-index[1]. True by default.

 core.splitIndex::
        If true, the split-index feature of the index will be used.
        See linkgit:git-update-index[1]. False by default.

 core.untrackedCache::
        Determines what to do about the untracked cache feature of the
        index. It will be kept, if this variable is unset or set to
        `keep`. It will automatically be added if set to `true`. And
        it will automatically be removed, if set to `false`. Before
        setting it to `true`, you should check that mtime is working
        properly on your system.
        See linkgit:git-update-index[1]. `keep` by default.

 core.quotePath::
        Commands that output paths (e.g. 'ls-files', 'diff'), will
        quote "unusual" characters in the pathname by enclosing the
        pathname in double-quotes and escaping those characters with
        backslashes in the same way C escapes control characters (e.g.
        `\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with
        values larger than 0x80 (e.g. octal `\302\265` for "micro" in
        UTF-8).  If this variable is set to false, bytes higher than
        0x80 are not considered "unusual" any more. Double-quotes,
        backslash and control characters are always escaped regardless
        of the setting of this variable.  A simple space character is
        not considered "unusual".  Many commands can output pathnames
        completely verbatim using the `-z` option. The default value
        is true.
3
YenForYang