web-dev-qa-db-fra.com

Paramètres de configuration Git spécifiques à Windows; où sont-ils placés?

J'ai lu la documentation Git et D'où viennent les paramètres de ma configuration Git? et pourtant je ne comprends toujours pas certains de mes paramètres.

Je suis sur Git 2.5.3 sous Windows 10. Voici la sortie de git config -l:

λ git config -l
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Ben Collins
user.email=#redacted#
alias.sm=submodule
alias.br=branch
alias.co=checkout
alias.st=status
alias.rebuild=!git rm --cached -r . && git reset --hard
core.excludesfile=C:\Users\Benjamin\Documents\gitignore_global.txt
core.editor=c:/Users/Benjamin/AppData/Local/atom/bin/atom.cmd
core.attributesfile=C:\Users\Benjamin\.gitattributes
Push.default=simple
merge.tool=p4merge
mergetool.p4merge.cmd=p4merge.exe "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
mergetool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
gui.encoding=utf-8
diff.guitool=p4merge
difftool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
difftool.p4merge.cmd=p4merge.exe "$LOCAL" "$REMOTE"
mergetool.keepbackup=false
rerere.enabled=true
credential.helper=!'C:\Users\Benjamin\AppData\Roaming\GitCredStore\git-credential-winstore.exe'
filter.lfs.clean=git lfs clean %f
filter.lfs.smudge=git lfs smudge %f
filter.lfs.required=true
color.diff.whitespace=red reverse

Ce qui est gênant, c'est que les douze premiers paramètres que je ne trouve pas nulle part .

C:\Program Files\Git
λ git config --system --list
fatal: unable to read config file 'C:\Program Files\Git\mingw64/etc/gitconfig': No such file or directory
C:\Program Files\Git
λ git config --global --list
user.name=Ben Collins
user.email=#redacted#
alias.sm=submodule
alias.br=branch
alias.co=checkout
alias.st=status
alias.rebuild=!git rm --cached -r . && git reset --hard
core.excludesfile=C:\Users\Benjamin\Documents\gitignore_global.txt
core.editor=c:/Users/Benjamin/AppData/Local/atom/bin/atom.cmd
core.attributesfile=C:\Users\Benjamin\.gitattributes
Push.default=simple
merge.tool=p4merge
mergetool.p4merge.cmd=p4merge.exe "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
mergetool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
gui.encoding=utf-8
diff.guitool=p4merge
difftool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
difftool.p4merge.cmd=p4merge.exe "$LOCAL" "$REMOTE"
mergetool.keepbackup=false
rerere.enabled=true
credential.helper=!'C:\Users\Benjamin\AppData\Roaming\GitCredStore\git-credential-winstore.exe'
filter.lfs.clean=git lfs clean %f
filter.lfs.smudge=git lfs smudge %f
filter.lfs.required=true
color.diff.whitespace=red reverse

De plus, lorsque j'essaie de désactiver l'un des douze premiers paramètres, cela n'a aucun effet:

C:\Users\Benjamin\Projects\blah [master +0 ~1 -0]
λ git config --unset core.autocrlf
C:\Users\Benjamin\Projects\blah [master +0 ~1 -0]
λ git config core.autocrlf
true
C:\Users\Benjamin\Projects\Saddleback\cm-core [master +0 ~1 -0]
λ git config --unset-all core.autocrlf
C:\Users\Benjamin\Projects\Saddleback\cm-core [master +0 ~1 -0]
λ git config core.autocrlf
true

Ces douze premiers paramètres sont-ils codés en dur ou spécifiques à la plate-forme? Comment puis-je les contrôler?

28
Ben Collins

Comme ce commit l'explique, ils ont ajouté un autre emplacement de configuration uniquement pour Windows, qui est appliqué avant même le --system:

Le fichier /etc/gitconfig Peut être utilisé pour stocker une configuration par défaut à l'échelle du système. Sous Windows, la configuration peut également être stockée dans C:\ProgramData\Git\config; Ce fichier sera également utilisé par les logiciels basés sur libgit2.

...

Sous Windows, comme il n'y a pas de répertoire central /etc/, Il existe encore un autre fichier de configuration, destiné à contenir des paramètres pour tous liés à Git logiciel exécuté sur la machine. Par conséquent, ce fichier de configuration a une priorité encore plus faible que le fichier $(prefix)/etc/gitconfig.

Je pense donc que vous pouvez trouver ces paramètres mystères dans C:\ProgramData\Git\config.


À partir de ce commit, je peux voir que git config --system --list Aurait dû vous montrer ces paramètres, mais il semble que l'absence de fichier C:\Program Files\Git\mingw64/etc/gitconfig Ait interrompu l'opération, ce qui est probablement un bogue.

36
Roman

Dans ma version de git, il y a un interrupteur - - show-Origin sur la commande list qui indique d'où le paramètre a été appliqué. Je suis d'accord que cela prête à confusion qu'il n'y a pas de commutateur fourni pour accéder à l'emplacement de configuration de Windows dans ProgramData.

C:\Users\karlb>git --version
git version 2.11.0.windows.3

C:\Users\karlb>git config --list --show-Origin
file:"C:\\ProgramData/Git/config"       core.symlinks=false
file:"C:\\ProgramData/Git/config"       core.autocrlf=true
file:"C:\\ProgramData/Git/config"       core.fscache=true
file:"C:\\ProgramData/Git/config"       color.diff=auto
file:"C:\\ProgramData/Git/config"       color.status=auto
file:"C:\\ProgramData/Git/config"       color.branch=auto
file:"C:\\ProgramData/Git/config"       color.interactive=true
file:"C:\\ProgramData/Git/config"       help.format=html
file:"C:\\ProgramData/Git/config"       http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
file:"C:\\ProgramData/Git/config"       diff.astextplain.textconv=astextplain
file:"C:\\ProgramData/Git/config"       rebase.autosquash=true
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    credential.helper=manager
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    difftool.usebuiltin=true
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    alias.lol=log --oneline --graph
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    alias.last=log -1 HEAD
file:C:/Users/karlb/.gitconfig  [email protected]
file:C:/Users/karlb/.gitconfig  user.name=Karl Horton
18
Karl Horton

TIL une mise en garde concernant Git for Widows. J'ai git version 2.17.1.windows.2.

J'ai essayé de définir un core.attributesfile Global pour remplacer les attributs de fin de ligne des fichiers *.sh (J'utilise [~ # ~] wsl [~ # ~] , et la version actuelle devient très mécontente lorsqu'elle essaie d'exécuter des scripts Shell avec des fins de ligne DOS (CRLF). Pour Git côté Linux, les lignes suivantes dans ~\.gitattributes résolvent le problème:

*.sln text eol=crlf
*.bat text eol=crlf
*.sh  text eol=cr

Mais en utilisant Git depuis Windows (par exemple via l'interface graphique de Sourcetree), pour certains référentiels, j'obtenais toujours CRLF dans des fichiers * .sh.

J'ai trouvé que dans ces référentiels, core.autocrlf=true. Le paramétrer sur input résout le problème et Git respecte le global gitattributes maintenant.

2
Alex Cohn