2010-10-29 10 views
78

Por defecto en Windows Git coloca .gitconfig global en c:\documents and settings\user\Cambio de ubicación de Windows, .gitconfig

¿Cómo puedo cambiar esa posición por lo que se almacena en .gitconfig c:\my_configuration_files\?

¿Se puede hacer?

+0

Solo quería agregar Me estoy topando con esto también. Tengo todas mis otras cosas globales de configuración de git ("archivos exludes" y "attrirutesfile") en% userprofile% /. Git/.gitignore (por lo que en una carpeta), pero el .gitconfig me encantaría que se siente al lado de ellos , pero tiene que estar en la raíz de% userprofile% .. realmente molesto. – WORMSS

+4

¿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. –

Respuesta

46

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

El cambio de HOME afectará, por supuesto, 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 debería considerar la respuesta de Stefan: puede establecer la variable GIT_CONFIG. Sin embargo, para darle el efecto que desea, debe pasar el indicador --global a todas las invocaciones de git (además de los archivos .git/config locales que se ignoran).

+1

Uhmm, solo un novato aquí.¿Podría ser un poco más descriptivo sobre cómo hacer eso? Please :) – Rook

+0

Ver mi edición anterior. –

+2

Hmm, ¿no estoy seguro de haber entendido bien pero no cambiar el HOME influirá también en todas las demás aplicaciones que lo utilicen? ¿No hay una manera de cambiar HOME, pero local a Git? – Rook

36

Cambiar el directorio HOME para 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. línea de comandos
  2. Ejecutar como administrador
  3. Ir a su directorio de usuario
  4. Introduzca MKLINK .gitconfig \ PathForNewLocationOfConfig.gitconfig
+8

Vale la pena agregar que si ejecuta git config --global para agregar un elemento a su configuración, su enlace simbólico se sobrescribirá con la copia real de .gitconfig que se está utilizando. Me encontré con este problema al probar una ubicación donde \ PathForNewLocationOfConfig.gitconfig era mi carpeta de Dropbox – MotoWilliams

+0

@MotoWilliams muy molesto. ¿Hay soluciones alternativas que me pregunto? Además de cambiar a Linux :) –

+5

Si su .gitconfig se encuentra en una unidad de red, es posible que aparezca el mensaje "El dispositivo no admite enlaces simbólicos" que rige esta opción. – noonand

3

Si se encuentra en ventanas y tener problema tampoco variables de entorno cambiantes o mklink debido Privilegios insuficientes, una solución fácil para su problema es comenzar el lote de git en otra ubicación.

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

+0

Wow esto totalmente funciona con facilidad. Creado un nuevo atajo y bajo 'propiedades-> comenzar en' modificado '% HOMEDRIVE %% HOMEPATH% 'a' c: \ my_repo_folder \ '. Trabajó un encanto. – Shane

+1

Esto no funcionó para mí. El archivo .gitconfig aún se cargó desde mi directorio de inicio –

3

Yo quería hacer lo mismo. Lo mejor que pude encontrar fue la solución de @ MicTech. Sin embargo, como señala @MotoWilliams, esto no sobrevive a ninguna actualización hecha por Git en el archivo .gitconfig que reemplaza el enlace con un nuevo archivo que contiene solo la nueva configuración.

Lo resolví 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 a .gitconfig del usuario en la global y luego reemplaza todo el texto en el archivo .gitconfig con el encabezado [include] que importa el archivo global.

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

Esto parece funcionar 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 ignórelas. Esto es útil para herramientas como SourceTree que escribirá nuevas actualizaciones si no pueden encontrar las existentes y no incluye includes.

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 
} 
9

No soy un maestro de git, pero a partir de la búsqueda en torno a la solución que funcionó más fácil para mí era sólo tiene que ir a C: \ Archivos de programa (x86) \ Git \ etc y abrir "perfil" en un texto editor. Hay una instrucción if en la línea 37 "# Configurar el directorio de inicio del USUARIO" Saqué la declaración if y puse en el directorio local que quería que fuera el gitconfig, luego copié mi archivo gitconfig existente (estaba en una unidad de red) a esa ubicación.

+0

Gracias ton. Mientras todas las demás opciones fallaron, esto me ahorró un millón de declaraciones de git multiplicadas por 6 segundos: D aquí es lo que hice ... ' HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "' – PravyNandas

5

Para mí, cambiar la ubicación de inicio en (al menos de git-gui) no afectaba a dónde buscaba .gitconfig. Mi configuración en el trabajo se monta en U: para nuestro hogar, pero no tenemos permiso para escribir en U: directamente, solo los subdirectorios que se crearon para nosotros en el interior, así que esto fue un factor decisivo para mí.

Resolví el problema haciendo una secuencia de comandos por lotes que anularía las variables de entrada HOMEDRIVE y HOMEPATH solo para esa aplicación. Luego cambié el atajo del menú Inicio para apuntar a ese script por lotes.

+0

http://stackoverflow.com/help/how-to-answer –

+0

Me gustaría obtener más información acerca de lo que hizo para lograr esta solución. –

9

He resuelto este problema utilizando un enfoque ligeramente diferente que he visto funcionar para otros archivos de configuración. Git Config admite incluye que le permite apuntar a un archivo de configuración en otra ubicación. Esa ubicación alternativa se importa y expande en su lugar como si fuera parte del archivo .gitconfig. Así que ahora sólo tengo una sola entrada en .gitconfig:

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

Cualquier actualización Escrito por Git en el fichero de .gitconfig no se sobreponen a mi ruta de inclusión. Significa que de vez en cuando podría necesitar mover valores de .gitconfig a my.config.

+0

+1: no hay configuraciones extrañas y mi gitconfig global es algo que almaceno en un repositorio git, así que hacer un seguimiento de lo que hay allí es mi trabajo. Al hacer cambios globales solo edito el archivo global a mano. Así que esto funciona perfectamente para mí, y no requiere ninguna rareza como cambiar tu variable de entorno "HOME", que es una idea extraña solo por el hecho de obtener la configuración de Git en el lugar que deseas. El directorio de inicio, después de todo, tiene otros significados para muchos otros programas. También puedes poner una identidad diferente en la parte superior y mantener la configuración de tus teclas igual en todas las identidades con esta solución. ¡Excelente! – user62177541

+0

Agradable. Esto funciona con la herramienta en lugar de trabajar alrededor (probablemente no se admitió cuando se formuló originalmente esta pregunta, y puede no funcionar para todos, como el comentarista, con un archivo gitconfig ubicado en una unidad de red). [Este hilo] (http://stackoverflow.com/a/9733277/301857) también puede ser útil para los visitantes. –

+0

Esta debería ser la respuesta correcta, gracias hombre. – spongeworthy

2

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

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

continuación, cambie HOME y HOMEDRIVE por

set HOME=c:\tmp 
set HOMEDRIVE=C: 
1

Como alguien que ha estado interesado en esto por un tiempo muy largo. Consulte en el manual:

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

Que fue agregado recientemente. Este volcado es de 2.15.0.

Funciona para mí.

Cuestiones relacionadas