show variables
で定義されている変数だけでなく、すべての変数を表示するMySQL my.ini
コマンドと同様に、all構成変数のリストを見たいin git
withwith default-values、and defined in the defined in my ~/.gitconfig
。
これは可能ですか?
それは議論されました 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 のデフォルトの色設定での別の例を参照してください。
git config --global -l
はグローバル変数またはgit config -l
ローカルリポジトリ変数
PS:質問を投稿してから2年が経ちましたが、同じことを探していたのでこの記事を読みました。かなり前に問題を解決した可能性があります。
このメソッドでは、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.