Similaire à MySQL show variables
commande qui affiche toutes les variables et pas seulement celles définies dans my.ini
, Je voudrais voir une liste de toutes variables de configuration dans git
avec leurs valeurs par défaut, et pas seulement celles définies dans mon ~/.gitconfig
.
Est-ce possible?
Cela a été débattu dans ce fil en 201 , demandé par Sebastian Schuberth , Jeff King (Peff
) ajoutant:
Le résultat attendu est certainement un problème, mais le problème est plus fondamental que cela:
git config
ne fait même pas savoir quelle est la valeur par défaut pour une option donnée.Il est supposé que l'appelant sait quoi faire avec une valeur non définie. Et cela n'a rien à voir avec
git config
; le code C interne fonctionne de la même manière.
Les valeurs par défaut réelles ne sont même pas nécessairement exprimables via la configuration .
Par exemple, je sais quehttp.receivepack
considère que "unset" est distinct "true
" ou "false
", mais sa définition ne peut donner qu'une seule de ces deux dernières valeurs.
Je suis sûr qu'il y en a d'autres aussi (je viens de le remarquer cette semaine).
Je pouvais certainement voir un argument selon lequel le monde serait un meilleur endroit si le code avait une grande table d'options et leurs descriptions, valeurs possibles et valeurs par défaut, et si nous l'utilisions pour générer de la documentation et valider les entrées.
Mais personne ne s'est donné la peine de construire cette table et de convertir tous les appelants. Et comme Jakub (Jakub Narębski) mentionné, une telle table centrale ne peut rien faire pour les programmes externes qui stockent leur configuration aux côtés de git.
En bref:
git config
ne connaît même aucune des options ou valeurs qu'il gère, mais est juste une interface "stupide" pour écrire/lire tout ce que vous lui transmettez depuis/vers un fichier.
Remarque: git config a été introduit dans commit 1771299 (git 0.99.9a, octobre 2005)
Différents programmes peuvent réagir à différentes options de configuration, bien qu'ils devraient toujours revenir à appeler "git_default_config ()" sur tout nom d'option de configuration qu'ils ne reconnaissent pas.
En interne, il existe donc un moyen de charger la configuration par défaut, utilisée aussi récemment que commit 72549df, git 2.2.0-rc1, nov. 2014 , par le même Peff:
Lorsque nous démarrons le programme git-fetch, nous appelons git_config pour charger toute la configuration, mais notre rappel ne traite que le
fetch.Prune
option; nous ne chaînons pas àgit_default_config
du tout.Cela signifie que nous ne pouvons pas charger une configuration de base qui aura un effet. Par exemple, nous ne chargeons pas
core.logAllRefUpdates
, ce qui a un impact sur la création ou non de reflogs dans un référentiel nu.Disons simplement charger la configuration de base au début de la récupération, donc nous savons que nous l'avons
Voir un autre exemple avec commit 3e1dd17, git 1.7.7-rc1, août 2011 avec la configuration de couleur par défaut.
git config --global -l
pour les variables globales ou git config -l
pour les variables du référentiel local
PS: Je sais que 2 ans se sont écoulés depuis que vous avez posté la question, mais je cherchais la même chose et j'ai lu ce post donc j'ai deviné que des utilisateurs comme moi auraient voulu une solution à leur problème et j'ai posté une réponse, même si vous ont probablement résolu votre problème il y a longtemps.
Cette méthode ne vous donnera pas vos paramètres avec les valeurs par défaut, mais c'est une méthode assez solide pour obtenir les paramètres documentés (et leurs valeurs par défaut, si documentées):
Obtenez d'abord la documentation du dépôt source
svn export https://github.com/git/git/trunk/Documentation
ou si vous n'avez pas svn
,
curl -L https://api.github.com/repos/git/git/tarball/master | tar -xvzf- --strip-components=1 --wildcards --no-anchored 'Documentation/*'
Entrez dans le répertoire
cd Documentation
Commencez grep
. J'ai deux versions: une détaillée et une plus compacte (probablement des détails manquants). Je vais utiliser les noms de drapeau plus longs ci-dessous pour plus de clarté.
D'abord la version compacte:
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)'
Pour la version plus "détaillée", changez simplement le --regexp=
drapeau vers
(?ms)(?:^[a-z][a-zA-Z]+\.[<>()*.a-zA-Z]+::\v+)+?(?:(?:\v|\h+\V+\v))+(?:\+\v+(?:--\v+.+?--|[^+]\V+(?!::\v))+)*(?:\v|\Z)
qui s'est étendu est
(?ms)
(?:
^[a-z][a-zA-Z]+\.
[<>()*.a-zA-Z]+::\v+
)+?
(?:
(?:\v|\h+\V+\v)
)+
(?:
\+\v+
(?:
--\v+
.+?
--
|
[^+]\V+(?!::\v)
)+
)*
(?:\v|\Z)
Et comme tout est basé sur l'extraction de regex, il va sans dire que cela peut un jour se casser (s'ils modifient le formatage de la documentation du fichier txt
).
Quelques exemples de sortie - notez que tous n'ont pas de valeurs par défaut:
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.