J'ai remarqué que j'ai 2 annonces 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
[email protected]
core.autocrlf=true
Ces 3 derniers (de user.name down) sont les seuls dans mon c:\users\username\.gitconfig
fichier. D'où viennent tous les autres? Pourquoi core.autocrlf est-il répertorié deux fois?
Ceci est avec msysgit 1.8.3 et j'ai également SourceTree installé (Windows 7). Dans SourceTree, j'ai décoché la case "Autoriser SourceTree à modifier vos fichiers de configuration Git globaux".
Git vérifie 4 emplacements pour un fichier de configuration:
.gitconfig
De votre machine..gitconfig
Situé à ~/.gitconfig
.$XDG_CONFIG_HOME/git/config
Ou $HOME/.config/git/config
..git/config
.Les paramètres sont mis en cascade dans l'ordre suivant, chaque fichier ajoutant ou remplaçant les paramètres définis dans le fichier situé au-dessus de lui.
Vous pouvez voir ce que chaque fichier a défini à l'aide des 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 seul 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 votre fichier d'utilisateur ~/.gitconfig
Dans lequel pointe toujours %homepath%
Si vous utilisez echo %homepath%
À partir d'une invite de commande Windows.
Depuis le documentation pour git config
:
S'il n'est pas défini explicitement avec
--file
, Il existe quatre fichiers dans lesquelsgit config
Recherchera des options de configuration:
$(prefix)/etc/gitconfig
Fichier de configuration à l'échelle du système.
$XDG_CONFIG_HOME/git/config
Deuxième fichier de configuration 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 tout ce qui se trouve dans~/.gitconfig
. C'est une bonne idée de ne pas créer ce fichier si vous utilisez parfois des versions plus anciennes de Git, car la prise en charge de ce fichier a été ajoutée récemment.
~/.gitconfig
Fichier de configuration spécifique à l'utilisateur. Également appelé fichier de configuration "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 tous les fichiers disponibles. Si le fichier de configuration global ou global n'est pas disponible, 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 différent de zéro. Cependant, dans aucun cas, un message d'erreur ne sera émis.Les fichiers sont lus dans l'ordre indiqué ci-dessus, la dernière valeur trouvée ayant priorité sur les valeurs lues précédemment. Lorsque plusieurs valeurs sont prises, toutes les valeurs d'une clé de tous les fichiers sont utilisées.
Toutes les options d’écriture écrivent par défaut dans le fichier de configuration spécifique au référentiel. Notez que cela affecte également les options telles que
--replace-all
Et--unset
.git config
ne modifiera jamais qu'un fichier à la foisVous pouvez remplacer ces règles par des options de ligne de commande ou par des variables d'environnement. Les options
--global
Et--system
Limitent le fichier utilisé au fichier global ou au fichier système. La variable d'environnementGIT_CONFIG
A un effet similaire, mais vous pouvez spécifier le nom de fichier de votre choix.
Vous n'avez plus à deviner quelle configuration a été réglée sur où, avec git 2.8! (Mars 2016)
Voir commit 70ang79 , commit 473166b , commit 7454ee , commit 7454ee (19 février 2016), commit 473166b , commit 7454ee (19 février 2016), commit 7454ee (19 février 2016), et commit a0578e (17 février 2016 ) par Lars Schneider (larsxschneider
) .
(Fusion par Junio C Hamano - gitster
- dans commit dd0f567 , 26 février 2016)
config: ajoute '
--show-Origin
'option pour imprimer l'origine d'une valeur de configurationSi les valeurs de configuration sont interrogées avec '
git config
'(par exemple via--get
,--get-all
,--get-regexp
, ou--list
flag), il est parfois difficile de trouver le fichier de configuration dans lequel les valeurs ont été définies.Apprendre '
git config
' le '--show-Origin
'option pour imprimer le fichier de configuration source pour chaque valeur imprimée.
Le git config
page de manuel indique maintenant:
--show-Origin:
Augmentez 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, réf ou identifiant de blob, le cas échéant).
Par exemple:
git config --list --show-Origin
Cela va retourner:
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 réglage, comme 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
Après avoir précédemment installé Git pour Windows et l'avoir désinstallé par la suite, j'ai constaté qu'un fichier de configuration était installé à l'emplacement C:\Utilisateurs\Tous les utilisateurs\Git\config, qui est un fichier de configuration au niveau système qui persiste et affectera tous les futurs paquets mingw32 git (dans mon cas, j’exécutais un paquet portable mingw32 git fourni par ma société). Quand j'ai couru
git config --system --edit
il me montrerait le fichier de configuration du système situé dans mingw32/etc/gitconfig, mais chargerait également les valeurs à partir du premier emplacement. Cela s'est avéré être un avertissement que les valeurs de configuration se sont heurtées lorsque vous essayez d'utiliser 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 lfs sont trop affirmés # 861 )
Git config -l affiche toutes les valeurs héritées de: system, global et local.
Donc, vous avez un autre fichier de configuration quelque part qui est chargé avec votre .gitconfig défini par l'utilisateur
Vous pouvez utiliser --show-Origin
Pour savoir d'où proviennent les configurations.
Priorité des fichiers de configuration dans Git pour Windows:
...
$PROGRAMDATA/Git/config
::
(Windows uniquement) Fichier de configuration système partagé avec d'autres implémentations Git. Typiquement,$PROGRAMDATA
Pointe surC:\ProgramData
.
$(prefix)/etc/gitconfig
::
Fichier de configuration système. (Windows uniquement) Ce fichier ne contient que les paramètres spécifiques à cette installation de Git pour Windows et qui ne doivent pas être partagés avec d'autres implémentations de Git telles que JGit, libgit2.--system
Sélectionnera ce fichier.
$XDG_CONFIG_HOME/git/config
::
Deuxième fichier de configuration 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 tout ce qui se trouve dans~/.gitconfig
. C'est une bonne idée de ne pas créer ce fichier si vous utilisez parfois des versions plus anciennes de Git, car la prise en charge de ce fichier a été ajoutée récemment.
~/.gitconfig
::
Fichier de configuration spécifique à l'utilisateur. Également appelé fichier de configuration "global".
$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 ayant priorité sur les valeurs lues précédemment.
...
$PROGRAMDATA
Est une variable d'environnement. Vous pouvez obtenir la valeur de ces variables comme ceci:
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 niveau supérieur dans lequel les choses sont installées. Dans Git pour Windows, il s’agit de <some-path>/mingw64
Ou de <some-path>/mingw32
.
J'ajoute une autre réponse car je ne pense pas qu'il existe une réponse complète pour Windows (c'est-à-dire une version Windows de la réponse acceptée).
Comme Linux, Windows a quatre niveaux de fichiers/paramètres de configuration et trois sont des équivalents directs. La chose importante à noter est l’autre - l’application "Toutes les applications/tous les utilisateurs", d’autant plus que c’est là que l’installateur définit les valeurs, par exemple. 'core.autocrlf = true' et pourtant, il n'est pas accessible depuis la ligne de commande, ce qui crée une confusion.
Toutes les applications/utilisateurs
Cela ressemble à une version partagée des paramètres ‘système’ si plusieurs applications git sont installées. Il n'y a pas de commande 'git config' pour accéder à ceux-ci mais ils ont toujours un impact sur le résultat net pour un paramètre.
Emplacement du fichier de configuration:
C:\ProgramData\Git\config
(Notez que "ProgramData" était "Tous les utilisateurs" sur les anciennes versions de Windows)
Système
Emplacement du fichier de configuration:
C:/Program Files/Git/mingw64/etc/gitconfig
$ git config --system --list
tilisateur
Emplacement du fichier de configuration:
% USERPROFILE% .gitconfig
(Cela résout c:/Users/')
$ git config --global --list
Repo
Emplacement du fichier de configuration:
[répertoire du dépôt actuel] /. git/config
$ git config --local --list
Sous Windows 7 (identique ou similaire pour Windows 10) pour Visual Studio et la ligne de commande git, votre configuration globale est en
%USERPROFILE%\.gitconfig
(le point est devant le fichier)
mais ceci n’est pas respecté par SourceTree, du moins en mode Git Embedded, et la configuration est en
%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig
(pas de point devant le fichier)
[J'avais besoin de mettre à jour les deux fichiers pour modifier mes paramètres globaux git pour la commande git et SourceTree]
Une autre partie amusante. Git hooks config fonctionnait à partir du AppData\Local\...
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ I Page\'? Cela a très peu de sens car très peu d'applications recherchent cet emplacement. ST ne le fait pas si vous ne pouvez pas utiliser les paramètres par emplacement sur ST, exécutez procmon.exe et créez une règle pour consigner uniquement le chemin contenant gitconfig. où se trouve vraiment votre conf globale en cas de répertoire utilisateur mappé sur le réseau. Et cela n’est peut-être même pas la faute de ST, comme je le vois maintenant en écrivant que git.exe est en train de charger cela, mais cela ne se produit que pour git.exe exécuté par ST, alors que la ligne de commande directe git utilise %USERPROFILE%\.gitconfig
Enfin, j'ai pris tous les résultats de procmon, alimenté en SQL et lancé une requête pour obtenir des résultats distincts (aucun ordre d'exécution particulier trié par chemin):
Je ne sais pas comment ces configurations se rapportent les unes aux autres, mais je sais que certaines remplacent d'autres, certains paramètres fonctionnent d'un emplacement à un autre. Et la liste ci-dessus est invoquée par SourceTree , encore une fois, la ligne de commande directe avec git semble bien fonctionner avec %USERPROFILE%\.gitconfig
et cela ne figure pas dans cette liste, mais ressemblerait à ceci (sous Win7) c:\Users\pawel.cioch\.gitconfig