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

j'ai remarqué que j'ai 2 listings pour core.autocrlf quand j'exécute 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

Those last 3 (from user.nom vers le bas) sont les seuls dans mon fichier c:usersusername.gitconfig . Où sont tous les autres à venir? Pourquoi est-core.autocrlf listé deux fois?

c'est avec msysgit 1.8.3 et J'ai aussi SourceTree installé (Windows 7). Dans SourceTree, j'ai décoché la case "Autoriser SourceTree de modifier vos fichiers de configuration de Git"

64
demandé sur RyanW 2013-07-20 02:57:22

5 réponses

Git contrôles de 4 places pour un fichier de configuration:

  1. le système de votre machine .gitconfig fichier.
  2. "1519310920 de Votre compte utilisateur .gitconfig fichier situé à ~/.gitconfig .
  3. un deuxième fichier de configuration spécifique à l'utilisateur situé à $XDG_CONFIG_HOME/git/config ou $HOME/.config/git/config .
  4. La local de pensions du fichier de config .git/config .

Les paramètres de la cascade à la suite de l'ordre, avec chaque ajout de fichier ou les cadres supérieurs définis dans le fichier au-dessus de lui.

  1. config Système.
  2. la configuration de l'Utilisateur.
  3. Repo-configuration spécifique.

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 repo-specific a défini en ouvrant le fichier .git/config pour ce repo.

si vous utilisez msysgit sur Windows, vous trouverez probablement votre utilisateur ~/.gitconfig fichier où jamais %homepath% pointe si vous utilisez echo %homepath% à partir d'une invite de commande de Windows.

De la documentation git config :

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

  • $(prefix)/etc/gitconfig

    fichier de configuration pour L'ensemble du système.

  • $XDG_CONFIG_HOME/git/config

    Second fichier de configuration spécifique à l'utilisateur. Si $XDG_CONFIG_HOME est définissez pas ou vide, $HOME/.config/git/config sera utilisé. Tout la variable à valeur unique définie dans ce fichier sera écrasée par tout ce qui est dans ~/.gitconfig . C'est une bonne idée de ne pas créer cette fichier si vous avez parfois utilisez des versions plus anciennes de Git, comme support pour ceci le fichier a été ajouté assez récemment.

  • ~/.gitconfig

    fichier de configuration spécifique à l'utilisateur. Aussi appelé configuration "globale" fichier.

  • $GIT_DIR/config

    fichier de configuration spécifique du dépôt.

si aucune autre option n'est étant donné, toutes les options de lecture Lira l'ensemble de ces fichiers sont disponibles. Si le système mondial ou l'ensemble du système les fichiers de configuration ne sont pas disponibles, ils seront ignorés. Si l' le fichier de configuration du dépôt n'est pas disponible ou lisible, git config sortira avec un code d'erreur non nul. Cependant, dans les deux cas un message d'erreur sera émis.

Les fichiers sont lus dans l'ordre donné ci-dessus, avec la dernière valeur trouvée priorité sur les valeurs lire antérieur. Lorsque plusieurs valeurs sont prendre ensuite toutes les valeurs d'une clé de tous les fichiers seront utilisés.

toutes les options d'écriture vont par défaut écrire au dépôt spécifique fichier de configuration. Notez que cela affecte aussi les options comme --replace-all et --unset . git config ne changera jamais un seul fichier à la fois.

vous pouvez outrepasser ces règles soit par des options de ligne de commande ou par environnement variable. Les options --global et --system limitez le fichier utilisé au fichier global ou à l'ensemble du système respectivement. La variable d'environnement GIT_CONFIG a un effet similaire, mais vous pouvez spécifier un nom de fichier que vous voulez.

81
répondu 2014-08-02 00:45:56

vous n'avez plus à deviner quelle configuration a été réglée à où, avec git 2.8! (Mars 2016)

Voir 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 CA Hamano -- gitster -- dans commit dd0f567 , 26 Feb 2016)

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

si les valeurs de configuration sont questionnées en utilisant " git config "(p.ex. via --get , --get-all , --get-regexp , ou --list drapeau), il est parfois difficile de trouver le fichier de configuration où les valeurs ont été définies.

Enseigner " git config " la " --show-origin ' option pour imprimer la source fichier de configuration pour chaque valeur imprimée.

Le git config l'homme page indique:

--show-origin:

augmente la sortie de toutes les options de configuration 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 id de blob si applicable).

par exemple:

git config --list --show-origin

qui 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 paramètre, comme , a commenté par wisbucky :

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

    file:"D:\prgs\git\latest\mingw64/etc/gitconfig"     true
    file:C:/Users/vonc/.gitconfig   false
44
répondu VonC 2017-11-22 18:42:33

après avoir installé Git for Windows et l'avoir désinstallé, j'ai trouvé qu'il y a un fichier de configuration installé à C:\Users\All Users\Git\config qui est un fichier de configuration au niveau du système qui persiste et affectera les futurs paquets git mingw32 (dans mon cas, j'exécutais un paquet git mingw32 portable fourni par ma compagnie). Quand j'ai couru

git config --system --edit

il me montrerait le fichier de configuration du système situé à mingw32/etc / gitconfig, mais chargerait encore les valeurs du premier emplacement. Cela s'est révélé comme un avertissement que les valeurs de configuration se sont heurtées lors de l'utilisation de 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"

(Note: Ceci peut aussi être une situation où les avertissements de l'EFT sont trop assertifs #861 )

7
répondu jinxcat2008 2015-12-12 00:39:34

git config-l affiche toutes les valeurs héritées: système, global et local.

donc vous avez un autre fichier de configuration quelque part qui est chargé avec votre utilisateur défini .gitconfig

2
répondu CBIII 2013-07-19 23:05:50

si vous voulez trouver l'emplacement du fichier, il sera dans votre répertoire personnel.

Il est caché et précédé d'un ".".

donc si vous êtes sur un Mac, dans votre terminal vous pouvez cd ~ && open .gitconfig ou l'ouvrir avec votre éditeur de texte préféré, E. g cd ~ && atom .gitconfig .

-1
répondu AshNaz87 2017-11-17 06:48:39