web-dev-qa-db-fra.com

git config: liste toutes les variables et leurs valeurs par défaut

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 gitavec leurs valeurs par défaut, et pas seulement celles définies dans mon ~/.gitconfig.

Est-ce possible?

29
Harry

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 que http.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).

( Par exemple: gc.Prune )

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.

25
VonC

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.

21
Matteo Meil

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.
3
YenForYang