Cambiar la ubicación de .gitconfig en Windows

105

De forma predeterminada en Windows, Git coloca el .gitconfig global en c:\documents and settings\user\

¿Cómo puedo cambiar esa posición para que se almacene .gitconfig c:\my_configuration_files\?

¿Se puede hacer en absoluto?

Torre
fuente
Solo quería agregar que también me estoy encontrando con esto. Tengo todas mis otras cosas de configuración global de git ("exludesfiles" y "attrirutesfile") en% userprofile% /. Git / .gitignore (es decir, en una carpeta), pero el .gitconfig me encantaría que se sentara junto a ellos , pero tiene que estar en la raíz de% userprofile% ... realmente molesto.
WORMSS
6
¿Algún progreso desde que se hizo la pregunta? Mi .gitconfig se encuentra en una unidad de red de forma predeterminada, lo que significa que no puede leerlo cuando estoy desconectado.
Lech Rzedzicki

Respuestas:

67

Si se establece HOMEque c:\my_configuration_files\, a continuación, git localizará .gitconfig allí. La edición de variables de entorno se describe aquí . Debe configurar la variable INICIO y luego volver a abrir cualquier ventana de cmd.exe. Use el comando "set" para verificar que HOME efectivamente apunte al valor correcto.

Por supuesto, cambiar HOME también afectará a otras aplicaciones. Sin embargo, al leer el código fuente de git, esa parece ser la única forma de cambiar la ubicación de estos archivos sin la necesidad de ajustar la línea de comando. También debe considerar la respuesta de Stefan: puede establecer la variable GIT_CONFIG. Sin embargo, para darle el efecto que desea, debe pasar la --globalbandera a todas las invocaciones de git (además de cualquier archivo .git / config local se ignora).

Martin contra Löwis
fuente
2
Mmmm, ¿no estoy seguro de haber entendido correctamente, pero el cambio de HOME no influirá también en todas las demás aplicaciones que lo utilizan? ¿No hay una forma de cambiar HOME, pero local a Git?
Torre
Sí, también tendría efecto en otras aplicaciones. Preguntaste cómo cambiar la ubicación y te lo dije. Ver mi edición.
Martin v. Löwis
10
¿Alguien ha logrado que esto funcione sin que los efectos secundarios de mudarse a CASA arruinen un montón de otras cosas?
Ade Miller
Lo más probable es que esta sea una solución que funcione en la plataforma Windows. También funcionó para mí. Usé el script refreshenv de Chocolatey para actualizar la variable de entorno HOME que configuré (variable de entorno de usuario). Después de eso, obtuve la ubicación del archivo deseada.
Tore Aurstad
Tuve que reinstalar Git para que esto funcionara. Si agregué una nueva variable de entorno llamada HOME y moví el .gitconfigarchivo a ese directorio, no funcionó.
Csaba
46

Cambie el directorio HOME porque esto es incorrecto. Mejor es crear un enlace simbólico para gitconfig al directorio HOME.

  1. Mueva su .gitconfig del directorio de inicio del usuario al directorio donde desee.
  2. Ejecute la línea de comando como administrador
  3. Vaya a su directorio de inicio de usuario
  4. Ingrese mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig
MicTech
fuente
9
Podría valer la pena agregar que si ejecuta git config --global para agregar un elemento a su configuración, su enlace simbólico se sobrescribirá con una copia real del .gitconfig que se está utilizando. Me encontré con este problema al probar una ubicación donde \ PathForNewLocationOfConfig.gitconfig era mi carpeta de Dropbox
MotoWilliams
8
Si su .gitconfig se encuentra en una unidad de red, es posible que reciba un mensaje "El dispositivo no admite enlaces simbólicos" que descarta esta opción.
mediodía y
4
No creo que esta solución funcione para nadie. En nuestra empresa, $HOMEestá en una unidad de red y siempre que hay algún problema con la conexión de red, el enlace tampoco está disponible.
andreee
1
@MotoWilliams revisando esto en 2017: el enlace simbólico permanece intacto después de editar con --global
Snake
2
Aquí, el grupo de policía (AD) establece HOMEDRIVE, HOMEPATH y HOMESHARE, pero no un HOGAR simple, antiguo y simple. En ausencia de HOME, git parece usar alguna combinación de los tres anteriores. Pero la configuración de HOME (a través de la metodología habitual para establecer variables de entorno específicas del usuario) funciona: GIT usa el valor de HOME que establezca, y la política de grupo no golpea a HOME.
David I. McIntosh
29

He resuelto este problema utilizando un enfoque ligeramente diferente que he visto funcionar para otros archivos de configuración. Git config soportes incluye que le permite apuntar a un archivo de configuración en otra ubicación. Luego, esa ubicación alternativa se importa y se expande en su lugar como si fuera parte del archivo .gitconfig. Entonces ahora solo tengo una sola entrada en .gitconfig:

[include]
   path = c:\\path\\to\\my.config

Cualquier actualización escrita por Git en el archivo .gitconfig no sobrescribirá mi ruta de inclusión. Significa que ocasionalmente puedo necesitar mover valores de .gitconfig a my.config.

Joe Brinkman
fuente
+1: sin configuraciones extrañas y mi gitconfig global es algo que almaceno en un repositorio de git, así que hacer un seguimiento de lo que hay allí es mi trabajo. Cuando hago cambios globales, simplemente edito el archivo global a mano. Así que esto funciona perfectamente para mí, y no requiere ninguna rareza como cambiar la variable de entorno "HOME", lo cual es una idea extraña solo por el simple hecho de llevar la configuración de Git donde la quieres. Después de todo, el directorio de inicio tiene otros significados para muchos otros programas. Además, puede poner una identidad diferente en la parte superior y mantener la misma configuración clave en todas las identidades con esta solución. ¡Excelente!
user62177541
2
Me pregunto si es posible que git config escriba en el archivo en el archivo [include] d.
Jonathan Nazario
1
@JonathanNazariogit config --file "included.file"
Pero P.
11

No soy un maestro de Git, pero buscar la solución que funcionó más fácilmente para mí fue simplemente ir C:\Program Files (x86)\Git\etcy abrir profileen un editor de texto.

Hay una ifdeclaración en la línea 37 # Set up USER's home directory. ifSaqué la declaración y lo puse en el directorio local que quería que fuera el gitconfig, luego simplemente copié mi archivo gitconfig existente (estaba en una unidad de red) en esa ubicación.

scottsandersdev
fuente
Gracias una tonelada. Si bien todas las demás opciones fallaron para mí, esto solo me ahorró un millón de declaraciones de git multiplicadas por 6 segundos: D esto es lo que hice ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas
2
La palabra 'hogar' (o cualquier cosa que parezca similar a tu línea: 37) ya no existe en git 2.24 (diciembre de 2019).
Frank Nocke
6

Para mí, cambiar la ubicación de Inicio en (de git-gui al menos) no afectó dónde buscaba .gitconfig. Mi configuración en el trabajo monta U: para nuestra casa, pero no tenemos permiso para escribir en U: directamente, solo subdirectorios que fueron creados para nosotros en el interior, así que esto fue un factor decisivo para mí.

Resolví el problema creando un script por lotes que anularía las variables env HOMEDRIVE y HOMEPATH solo para esa aplicación. Luego cambié mi acceso directo al menú Inicio para apuntar a ese script por lotes en su lugar.

Brian Blackburn
fuente
1
Me gustaría obtener más información sobre lo que hizo para lograr esta solución.
Matt Casto
¿Puedes compartir tu solución?
Sal
4

Primero verifique la configuración de INICIO, luego cambie INICIO y HOMEDRIVE a un directorio existente.

c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\

luego cambie HOME y HOMEDRIVE por

set HOME=c:\tmp
set HOMEDRIVE=C:
Aliti
fuente
3

Si está en Windows y tiene problemas para cambiar las variables de entorno o mklinkdebido a privilegios insuficientes, una solución fácil a su problema es iniciar git batch en otra ubicación.

Simplemente haga clic derecho en Git Bash.exe, haga clic en propiedades y cambie la propiedad "Iniciar en" a c:\my_configuration_files\.

FatAlbert
fuente
Vaya, esto funciona totalmente con facilidad. Se creó un nuevo atajo y en 'propiedades-> comenzar en' cambió %HOMEDRIVE%%HOMEPATH%a `c: \ my_repo_folder`. Funcionó de maravilla.
Shane
2
Esto no funcionó para mí. El archivo .gitconfig todavía se cargó desde mi directorio de inicio
Dave B
3

Quería hacer lo mismo. Lo mejor que pude encontrar fue la solución de @ MicTech. Sin embargo, como señaló @MotoWilliams, esto no sobrevive a las actualizaciones realizadas por Git al archivo .gitconfig, que reemplaza el enlace con un nuevo archivo que contiene solo la nueva configuración.

Resolví esto escribiendo el siguiente script de PowerShell y ejecutándolo en el script de inicio de mi perfil. Cada vez que se ejecuta, copia cualquier configuración que se haya agregado al .gitconfig del usuario al global y luego reemplaza todo el texto del archivo .gitconfig con un encabezado [include] que importa el archivo global.

Mantengo el archivo .gitconfig global en un repositorio junto con muchos otros scripts y herramientas globales. Todo lo que tengo que hacer es recordar verificar cualquier cambio que el script agregue a mi archivo global.

Esto parece funcionar de manera bastante transparente para mí. ¡Espero eso ayude!

9 de septiembre: actualizado para detectar cuando las nuevas entradas agregadas al archivo de configuración son duplicadas e ignorarlas. Esto es útil para herramientas como SourceTree que escribirán nuevas actualizaciones si no pueden encontrar las existentes y no siguen las inclusiones.

function git-config-update
{
  $localPath = "$env:USERPROFILE\.gitconfig".replace('\', "\\")
  $globalPath = "C:\src\github\Global\Git\gitconfig".replace('\', "\\")

  $redirectAutoText = "# Generated file. Do not edit!`n[include]`n  path = $globalPath`n`n"
  $localText = get-content $localPath

  $diffs = (compare-object -ref $redirectAutoText.split("`n") -diff ($localText) | 
    measure-object).count

  if ($diffs -eq 0)
  {
    write-output ".gitconfig unchanged."
    return
  }

  $skipLines = 0
  $diffs = (compare-object -ref ($redirectAutoText.split("`n") | 
     select -f 3) -diff ($localText | select -f 3) | measure-object).count
  if ($diffs -eq 0)
  {
    $skipLines = 4
    write-warning "New settings appended to $localPath...`n "
  }
  else
  {
    write-warning "New settings found in $localPath...`n "
  }
  $localLines = (get-content $localPath | select -Skip $skipLines) -join "`n"
  $newSettings = $localLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries) | 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $globalLines = (get-content  $globalPath) -join "`n"
  $globalSettings =  $globalLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries)| 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $appendSettings = ($newSettings | %{ $_.Trim() } | 
    where { !($globalSettings -contains $_.Trim()) })
  if ([string]::IsNullOrWhitespace($appendSettings))
  {
    write-output "No new settings found."
  }
  else
  {
    echo $appendSettings
    add-content $globalPath ("`n# Additional settings added from $env:COMPUTERNAME on " + (Get-Date -displayhint date) + "`n" + $appendSettings)
  }
  set-content $localPath $redirectAutoText -force
}
Ade Miller
fuente
2

Como alguien que ha estado interesado en esto por MUCHO TIEMPO. Ver en el manual:

$ XDG_CONFIG_HOME / git / config - Segundo archivo de configuración específico del usuario. Si $XDG_CONFIG_HOMEno está configurado o vacío, se usará $ HOME / .config / git / config. Cualquier variable de un solo valor establecida en este archivo se sobrescribirá con lo que esté en ~ / .gitconfig. Es una buena idea no crear este archivo si a veces usa versiones anteriores de Git, ya que recientemente se agregó soporte para este archivo.

Que se agregó recientemente. Este volcado es de 2.15.0.

Funciona para mi.

ehiller
fuente
Esta es la solución más simple, menos intrusiva y más confiable de Windows.
kwill
2
  1. Cambiar a carpeta %PROGRAMFILES%\Git\etc
  2. Editar archivo profile
  3. Agregar a la primera línea HOME="c:\location_were_you_want_gitconfig"
  4. Hecho

Nota: Los permisos de archivo generalmente están restringidos, así que cámbielos en consecuencia o no podrá guardar sus cambios.

cuasijoe
fuente
Esto no funciona a partir de git 2.24, Win10, diciembre de 2019. git config --list --show-originmuestra, el HOME original todavía está en su lugar.
Frank Nocke
1

Para mí funcionó muy simple:

  1. Copie ".gitconfig" del directorio antiguo: a% USERPROFILE% (estándar en "c: \ users \ username")
  2. Haga clic derecho en los iconos de inicio de GITGUI y GITBASH y cambie "ejecutar en": "% HOMEDRIVE %% HOMEPATH%" a "% USERPROFILE%". Por supuesto, puede utilizar cualquier otro directorio en lugar de "% USERPROFILE%".

captura de pantalla antes

captura de pantalla después

Ralph Schwerdt
fuente
0

Solución sin tener que cambiar el
SO variable de Windows HOME : Windows 10
versión git: 2.27.0.windows.1

Utilizo la versión portátil de Git, por lo que todos mis archivos de configuración están en mi pen-drive (E :). Esto es lo que funcionó para mí:

  1. Descargue Git portátil desde https://git-scm.com/ . Ejecute el archivo e instálelo en la ubicación requerida. Lo instalé en E: \ git .
  2. Ejecute git-bash.exe desde E: \ git .
  3. Quería poner .gitconfigy otros archivos bash en E , así que creé una carpeta llamada home donde los quiero todos.
    mkdir home
  4. Vaya a la carpeta etc y abra el archivo llamado perfil (en mi caso, es E: \ git \ etc \ profile)
  5. Agregue la ruta absoluta al directorio de inicio que creamos (o al directorio donde desea tener su archivo .gitconfig) al final del archivo de perfil .
    HOME="E:\git\home"

Ahora ya no busca en el directorio C: \ Users <nombre de usuario> .gitconfig, sino que solo busca en la ruta establecida anteriormente.

$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory

Dio un error porque todavía no hay un archivo .gitconfig allí. Esto es solo para demostrar que hemos cambiado con éxito la ubicación del archivo .gitconfig sin cambiar el directorio HOME en Windows.

Allika
fuente