96 votes

D'où viennent les paramètres de ma configuration Git ?

J'ai remarqué que j'ai deux inscriptions pour core.autocrlf quand je cours 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

Ces trois derniers (à partir de user.name vers le bas) sont les seuls dans ma liste d'utilisateurs. C:\users\username\.gitconfig dossier. D'où viennent tous les autres ? Pourquoi le fichier core.autocrlf est-il cité deux fois ?

C'est avec MSysGit 1.8.3, et j'ai également installé Sourcetree (Windows 7). Dans Sourcetree, j'ai décoché l'option "Allow Sourcetree to modify your global Git config files".

105voto

Git vérifie quatre endroits pour un fichier de configuration :

  1. Le système de votre machine .gitconfig fichier.
  2. Votre utilisateur .gitconfig situé à l'adresse ~/.gitconfig .
  3. Un deuxième fichier de configuration spécifique à l'utilisateur situé à l'adresse $XDG_CONFIG_HOME/git/config o $HOME/.config/git/config .
  4. Le fichier de configuration du référentiel local .git/config .

Les paramètres s'enchaînent dans l'ordre suivant, chaque fichier ajoutant ou remplaçant les paramètres définis dans le fichier qui le précède.

  1. Configuration du système.
  2. Configuration de l'utilisateur.
  3. Configuration spécifique au référentiel.

Vous pouvez voir ce que chaque fichier a défini en utilisant les commandes suivantes :

# 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

Vous pouvez voir ce que le fichier spécifique au référentiel a défini en ouvrant le fichier .git/config pour ce référentiel.

Si vous utilisez MSysGit sous Windows, vous trouverez probablement que votre utilisateur ~/.gitconfig où que ce soit %homepath% pointe vers si vous utilisez echo %homepath% à partir d'une invite de commande Windows.

De la la documentation pour git config :

Si elle n'est pas définie explicitement avec --file il y a quatre fichiers où git config recherchera les options de configuration :

  • $(prefix)/etc/gitconfig

    Fichier de configuration du système.

  • $XDG_CONFIG_HOME/git/config

Deuxième fichier de configuration spécifique à l'utilisateur. Si $XDG_CONFIG_HOME est non défini ou vide, $HOME/.config/git/config sera utilisé. Tout variable à une seule valeur définie dans ce fichier sera écrasée par ce qui se trouve dans ~/.gitconfig . C'est une bonne idée de ne pas créer ce fichier si vous utilisez parfois d'anciennes versions de Git, car le support de ce fichier a été ajouté assez récemment. a été ajouté assez récemment.

  • ~/.gitconfig

Fichier de configuration spécifique à l'utilisateur. Également appelé configuration "globale". global.

  • $GIT_DIR/config

    Fichier de configuration spécifique au référentiel.

Si aucune autre option n'est donnée, toutes les options de lecture liront la totalité de ces fichiers qui sont disponibles. Si le fichier de configuration global ou celui du système ne sont pas disponibles, ils seront ignorés. Si le fichier de configuration du référentiel n'est pas disponible ou lisible, git config se terminera avec un code d'erreur non nul. Cependant, dans les deux cas un message d'erreur ne sera émis.

Les fichiers sont lus dans l'ordre indiqué ci-dessus, la dernière valeur trouvée étant prioritaire. est prioritaire sur les valeurs lues précédemment. Lorsque plusieurs valeurs sont valeurs, toutes les valeurs d'une clé de tous les fichiers seront utilisées.

Toutes les options d'écriture écriront par défaut dans le référentiel spécifique de la base de données spécifique au dépôt. Notez que cela affecte également les options comme --replace-all y --unset . git config ne changera jamais un seul fichier à la fois.

Vous pouvez passer outre ces règles soit par des options de la ligne de commande, soit par la commande variables d'environnement. Le site --global y el --system les options seront limitent le fichier utilisé au fichier global ou à celui du système respectivement. L'option GIT_CONFIG a un effet similaire, mais vous mais vous pouvez spécifier le nom de fichier que vous voulez.

73voto

VonC Points 414372

Vous n'avez plus besoin de deviner quelle configuration a été définie à quel endroit, avec git 2.8 ! (mars 2016).

Véase commettre 70bd879 , commettre 473166b , commettre 7454ee3 , commettre 7454ee3 (19 février 2016), commettre 473166b , commettre 7454ee3 (19 février 2016), commettre 7454ee3 (19 février 2016), et commettre a0578e0 (17 février 2016) par Lars Schneider ( larsxschneider ) .
(fusionné par Junio C Hamano -- gitster -- en commettre dd0f567 , 26 février 2016)

config : ajouter ' --show-origin Option ' pour imprimer l'origine d'une valeur de configuration

Si les valeurs de configuration sont interrogées en utilisant ' git config (par exemple, via --get , --get-all , --get-regexp o --list drapeau), il est parfois difficile de trouver le fichier de configuration où les valeurs ont été définies.

Enseigner git config le --show-origin option ' pour imprimer la source source pour chaque valeur imprimée.

En git config page de manuel indique maintenant :

--show-origin:

Augmente la sortie de toutes les options de configuration interrogées avec le type d'origine (fichier, entrée standard, blob, ligne de commande) et l'origine réelle (chemin du fichier de configuration, ref, ou identifiant du blob si applicable).

Par exemple :

git config --list --show-origin

Cela reviendra :

    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

Pour un décor, comme a commenté por wisbucky :

git config --show-origin --get-all core.autocrlf

    file:"D:\\prgs\\git\\latest\\mingw64/etc/gitconfig"     true
    file:C:/Users/vonc/.gitconfig   false

Avec Git 2.26 (Q1 2020), vous pourrez peut ajouter le --show-scope option :

git config -l --show-origin --show-scope

10voto

jinxcat2008 Points 383

Après avoir préalablement installé Git pour Windows et en le désinstallant par la suite, j'ai découvert qu'un fichier de configuration est installé à l'adresse suivante C:\Users\All Users\Git\config qui est un fichier de configuration au niveau du système qui persiste et affectera tous les futurs paquets Git MinGW32 (dans mon cas, j'utilisais un paquet Git MinGW32 portable fourni par ma société). Lorsque j'ai exécuté

git config --system --edit

il me montrerait le fichier de configuration du système situé à l'adresse mingw32/etc/gitconfig mais il chargera toujours les valeurs du premier emplacement. Cela s'est traduit par un avertissement indiquant que les valeurs de configuration étaient incompatibles lorsque l'on a essayé d'utiliser la commande 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"

(Remarque : il peut également s'agir d'une situation dans laquelle les avertissements de la LFS sont trop affirmés, #861 )

4voto

Ini Points 206

Vous pouvez utiliser --show-origin afin de découvrir d'où proviennent les configurations.

Priorité aux fichiers de configuration dans Git pour Windows :

...

$PROGRAMDATA/Git/config : :
(Windows uniquement) Configuration de l'ensemble du système partagé avec d'autres implémentations de Git. Typiquement $PROGRAMDATA Les points suivants C:\ProgramData .

$(prefix)/etc/gitconfig : :
Fichier de configuration du système. (Windows uniquement) Ce fichier contient uniquement les paramètres qui sont spécifiques à cette installation de Git pour Windows. spécifiques à cette installation de Git pour Windows et qui ne doivent pas pas être partagés avec d'autres implémentations de Git comme JGit, libgit2. --system sélectionnera ce fichier.

$XDG_CONFIG_HOME/git/config : :
Deuxième fichier de configuration spécifique à l'utilisateur spécifique à l'utilisateur. Si $XDG_CONFIG_HOME n'est pas défini ou vide, $HOME/.config/git/config sera utilisé. Toute variable à valeur unique définie dans ce fichier sera écrasée par ce qui se trouve dans le fichier ~/.gitconfig . C'est une bonne idée de ne pas créer ce fichier si vous utilisez parfois d'anciennes versions de Git, car la prise en charge de ce fichier a été a été ajouté assez récemment.

~/.gitconfig : :
Fichier de configuration spécifique à l'utilisateur. Également appelé "global". fichier de configuration.

$GIT_DIR/config : :
Fichier de configuration spécifique au référentiel.

...

Les fichiers sont lus dans l'ordre indiqué ci-dessus, la dernière valeur trouvée étant prioritaire sur les valeurs lues précédemment. est prioritaire sur les valeurs lues précédemment.

...

Source : https://github.com/git-for-Windows/git/blob/master@%7B2018-01-07%7D/Documentation/git-config.txt#L231

$PROGRAMDATA est une variable d'environnement. Vous pouvez obtenir la valeur de ces variables comme suit :

Dans Git Bash, vous devez utiliser echo "$ProgramData" . Dans CMD, vous devez utiliser echo %PROGRAMDATA% . Notez que Git Bash prétend apparemment que les variables d'environnement sont sensibles à la casse.

Qu'est-ce que $(prefix) ?

Le préfixe est le répertoire de premier niveau dans lequel les choses sont installées. Dans Git pour Windows, c'est soit <some-path>/mingw64 o <some-path>/mingw32 .

4voto

VonC Points 414372

En plus de git config -l --show-origin que J'ai présenté ici avec git 2.8 (mars 2016), vous avez maintenant, avec Git 2.26 (Q1 2020)

git config -l --show-scope

# you can combine both options:
git config -l --show-origin --show-scope

git config a appris à montrer dans quel " scope ", ainsi que le fichier d'où provient chaque paramètre de configuration.

Véase commettre 145d59f , commettre 9a83d08 , commettre e37efa4 , commettre 5c105a8 , commettre 6766e41 , commettre 6dc905d , commettre a5cb420 (10 février 2020), et commit 417be08 , commettre 3de7ee3 , commettre 329e6ec (24 janvier 2020) par Matthew Rogers ( ROGERSM94 ) .
(fusionné par Junio C Hamano -- gitster -- en commettre 5d55554 , 17 février 2020)

config ajouter '--show-scope' pour afficher la portée d'une valeur de configuration

Signé par : Matthew Rogers

Lorsqu'un utilisateur interroge les valeurs de configuration avec --show-origin il est souvent difficile de déterminer ce que le " scope " ( local , global ) d'une valeur donnée est basée sur le seul fichier d'origine.

Enseigne à " git config " le --show-scope L'option ' pour imprimer la portée de toutes les valeurs de configuration affichées.

Notez que nous ne devrions jamais voir quoi que ce soit de la portée de "submodule" car cela n'est utilisé que par submodule-config.c lors de l'analyse du fichier '.gitmodules'.

Exemple :

git config -l --show-scope

global  user.global=true
global  user.override=global
global  include.path=$INCLUDE_DIR/absolute.include
global  user.absolute=include
local   user.local=true
local   user.override=local
local   include.path=../include/relative.include
local   user.relative=include

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X