He notado que tengo dos listas para core.autocrlf
cuando ejecutogit 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
Los últimos tres (desde user.name hacia abajo) son los únicos en mi C:\users\username\.gitconfig
archivo. ¿De dónde vienen todos los demás? ¿Por qué core.autocrlf aparece dos veces?
Esto es con MSysGit 1.8.3, y también tengo instalado Sourcetree (Windows 7). En Sourcetree, he desmarcado "Permitir que Sourcetree modifique sus archivos de configuración globales de Git"
git
msysgit
git-config
RyanW
fuente
fuente
git config --list --show-origin
, no tendrás que adivinar qué configuración de git está dónde. Vea mi respuesta a continuaciónRespuestas:
Git busca un archivo de configuración en cuatro lugares:
.gitconfig
archivo de sistema de su máquina ..gitconfig
archivo de usuario ubicado en~/.gitconfig
.$XDG_CONFIG_HOME/git/config
o$HOME/.config/git/config
..git/config
.Las configuraciones se despliegan en el siguiente orden, con cada archivo agregando o anulando configuraciones definidas en el archivo arriba.
Puedes ver lo que ha definido cada archivo usando los siguientes comandos:
# 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
Puede ver lo que solo ha definido el archivo específico del repositorio abriendo el archivo
.git/config
para ese repositorio.Si está usando MSysGit en Windows, probablemente encontrará su
~/.gitconfig
archivo de usuario donde sea que%homepath%
apunte si lo usaecho %homepath%
desde un símbolo del sistema de Windows.De la documentación para
git config
:fuente
.gitconfig
archivo de sistema de la máquina " cuando está en Windows con msysgit?C:\Program Files (x86)\Git\etc\gitconfig
. Sin embargo, no estoy seguro de si ese es el correcto.C:\Program Files\Git\mingw64\etc\gitconfig
C:\Program Files\Git\etc\gitconfig
¡Ya no tienes que adivinar qué configuración se ha establecido en dónde, con git 2.8! (Marzo de 2016)
Consulte la confirmación 70bd879 , la confirmación 473166b , la confirmación 7454ee3 , la confirmación 7454ee3 (19 de febrero de 2016), la confirmación 473166b , la confirmación 7454ee3 (19 de febrero de 2016), la confirmación 7454ee3 (19 de febrero de 2016) y la confirmación a0578e0 (17 de febrero de 2016) por Lars Schneider (
larsxschneider
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso dd0f567 , 26 de febrero de 2016)La
git config
página de manual ahora indicará:Por ejemplo:
Eso volverá:
Para un entorno, como comentado por wisbucky :
Con Git 2.26 (Q1 2020), puede agregar la
--show-scope
opción :fuente
user.cmdline=true
se requiere--show-origin
que funcione. Además, he notado que--show-origin
debe ser inmediatamente posteriorconfig
para poder trabajar con--get
y--get-all
. Así debería ser... config --show-origin --get-all core.autocrlf
-c 'user.cmdline=true'
bit, que parece referirse al alcance de la prueba: github.com/git/git/blob/…user.cmdline=true
era necesario en Git 2.13, pero ya no es necesario en Git 2.15.Después de haber instalado Git para Windows y posteriormente desinstalarlo, descubrí que hay un archivo de configuración instalado en el
C:\Users\All Users\Git\config
que hay un archivo de configuración a nivel del sistema que persiste y afectará a cualquier paquete futuro de MinGW32 Git (en mi caso, estaba ejecutando un MinGW32 portátil Paquete de Git proporcionado por mi empresa). Cuando corríme mostraría el archivo de configuración del sistema ubicado en
mingw32/etc/gitconfig
, pero también cargaría los valores desde la primera ubicación. Esto se mostró como una advertencia de que los valores de configuración entraban en conflicto al intentar usar Git LFS .(Nota: esta también puede ser una situación en la que las advertencias de LFS sean demasiado asertivas, # 861 )
fuente
Puede usarlo
--show-origin
para averiguar de dónde provienen las configuraciones.Prioridad de los archivos de configuración en Git para Windows:
Fuente: https://github.com/git-for-windows/git/blob/master@%7B2018-01-07%7D/Documentation/git-config.txt#L231
$PROGRAMDATA
es una variable de entorno. Puede obtener el valor de esas variables de esta manera:En Git Bash necesitas usar
echo "$ProgramData"
. En CMD, debe usarecho %PROGRAMDATA%
. Tenga en cuenta que Git Bash aparentemente pretende que las variables de entorno distinguen entre mayúsculas y minúsculas.Que es
$(prefix)
?El prefijo es el directorio de nivel superior en el que se instalan las cosas. En Git para Windows, eso es
<some-path>/mingw64
o<some-path>/mingw32
.fuente
git config -l
muestra todos los valores heredados del sistema, global y local.Entonces, tiene otro archivo de configuración en algún lugar que se está cargando junto con su
.gitconfig
archivo definido por el usuario .fuente
Una respuesta completa para Windows (es decir, una versión de Windows de la respuesta aceptada):
Como Linux, Windows tiene cuatro niveles de archivos / configuraciones de configuración y tres son equivalentes directos. Lo importante a tener en cuenta es el otro, el de 'Todas las aplicaciones / usuarios', especialmente porque aquí es donde el instalador establece los valores, por ejemplo, 'core.autocrlf = true', y sin embargo, no se puede acceder a él desde la línea de comandos por lo que causa confusión.
Todas las aplicaciones y usuarios
Esto es como una versión compartida de la configuración del 'sistema' en caso de que tenga instaladas varias aplicaciones Git. No hay un comando 'git config' para acceder a estos, pero aún afectan el resultado neto de una configuración.
Ubicación del archivo de configuración:
C: \ ProgramData \ Git \ config
(Tenga en cuenta que 'ProgramData' era 'Todos los usuarios' en versiones anteriores de Windows).
Sistema
Ubicación del archivo de configuración: C: / Archivos de programa / Git / mingw64 / etc / gitconfig
Usuario
Ubicación del archivo de configuración:% USERPROFILE% .gitconfig (Esto se resuelve en 'C: / Users / <username>')
Repositorio
Ubicación del archivo de configuración: [directorio del repositorio actual] /. Git / config
fuente
Además de lo
git config -l --show-origin
que presenté aquí , con git 2.8 (marzo de 2016), ahora tiene, con Git 2.26 (Q1 2020)git config
aprendí a mostrar en qué "scope
", además de en qué archivo, proviene cada ajuste de configuración.Consulte la confirmación 145d59f , la confirmación 9a83d08 , la confirmación e37efa4 , la confirmación 5c105a8 , la confirmación 6766e41 , la confirmación 6dc905d , la confirmación a5cb420 (10 de febrero de 2020) y la confirmación 417be08 , la confirmación 3de7ee3 , la confirmación 329e6ec (24 de enero de 2020) por Matthew Rogers (
ROGERSM94
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 5d55554 , 17 de febrero de 2020)Ejemplo:
fuente
En Windows 7 (tal vez el mismo o similar para Windows 10), para Visual Studio y la línea de comandos de Git, su configuración global está en:
(el punto está delante del nombre del archivo)
Pero esto no es respetado por Sourcetree, al menos en el modo Git Embedded, y la configuración está en:
(sin punto delante del nombre del archivo)
(Necesitaba actualizar ambos archivos para modificar mi configuración global de Git para el comando Git y Sourcetree).
Otra parte divertida. La configuración de los ganchos de Git funcionaba desde la
AppData\Local\...
ubicación, pero después de más investigación a través de Process Monitor , noté que de alguna manera Sourcetree también se está cargando globalmente desde la unidad asignada por la empresa para mi usuario.Esto tiene muy poco sentido ya que muy pocas aplicaciones buscan esta ubicación, pero de alguna manera Sourcetree lo hace, por lo que si no puede hacerlo funcionar según la configuración de ubicación en Sourcetree, ejecute Process Monitor y cree una regla para registrar solo la ruta que contenga gitconfig, y usted puede encontrar dónde está realmente su configuración global en el caso de un directorio de usuarios mapeado en red.
Y esto puede que ni siquiera sea culpa de Sourcetree, como veo ahora, mientras escribo esto, que git.exe está cargando eso, pero esto sucede solo para git.exe ejecutado por Sourcetree, mientras que una línea de comando directa Git usa
%USERPROFILE%\.gitconfig
Finalmente, tomé todos los resultados de Process Monitor, los introduje en SQL Server y ejecuté una consulta para obtener resultados distintos (ningún orden de ejecución en particular, solo ordenado por ruta):
No sé cómo se relacionan esas configuraciones entre sí, pero sé que algunas anulan a otras, algunas configuraciones funcionan desde una ubicación y otras desde otra.
Y Sourcetree invoca la lista anterior , nuevamente dirigir una línea de comando con Git parece funcionar bien
%USERPROFILE%\.gitconfig
, y eso no está en esta lista, pero se vería así (en Windows 7)C:\Users\pawel.cioch\.gitconfig
fuente
Si desea buscar para encontrar la ubicación real del archivo, estará en su directorio de inicio.
Está oculto y precedido por un ".".
Entonces, si está en una Mac, en su terminal puede
cd ~ && open .gitconfig
abrirlo con su editor de texto favorito, por ejemplocd ~ && atom .gitconfig
.fuente