2012-06-29 10 views
41

Tengo una variable de shell que apunta al directorio donde se encuentran todos mis archivos de configuración. Supongamos que la variable se crea con export RC=$HOME/rc. Tengo un archivo global de ignorar en el directorio de configuración: ~/rc/globalgitignore.Expansión de variable de shell en git config

Mi pregunta es, ¿cómo puedo expandir la variable RC en mi archivo .gitconfig?

ya he intentado lo siguiente:

  • excludesfile = $RC/globalgitignore

  • excludesfile = !$RC/globalgitignore

  • excludesfile = !echo $RC/globalgitignore

  • excludesfile = !$(echo $RC/globalgitignore)

Ninguna de estas soluciones funciona.

La única forma en que esto funciona si ingreso la ruta completa: excludesfile = ~/rc/globalgitignore, pero luego tengo que cambiar la ruta si muevo mi directorio rc a una ubicación diferente.

Respuesta

32

No puede. git-config(1) no soporta expansión variable de entorno, pero sólo conversión de tipo limitado y expansión ruta:

El especificador de tipo puede ser o bien --int o --bool, para hacer config git asegurar que la variable (s) son de el tipo dado y convertir el valor a la forma canónica (número decimal simple para int, una cadena "verdadera" o "falsa" para bool), o --path, que hace una expansión de ruta (ver --rutamiento debajo) . Si no se pasa el especificador de tipo, no se realizan comprobaciones o transformaciones en el valor.

La documentación para --path estados:

--path

git-config se ampliar líder ~ al valor de $ HOME, y ~ usuario para el directorio inicial de la especificada usuario. Esta opción no tiene ningún efecto al establecer el valor (pero puede usar git config bla ~/desde la línea de comando para permitir que su shell realice la expansión).

El término "expansión" no aparece en ningún contexto diferente en git-config(1). Entonces, ¿cómo se le ocurrió la idea de que así fuera, dado que ninguna característica de este tipo está documentada en ninguna parte?

Para expandir las variables de entorno debe preprocesar el archivo de configuración de Git usted mismo, es decir, creando un archivo de plantilla y expandir las variables con una secuencia de comandos antes de copiar el archivo en su directorio $HOME.

Si se trata de la administración de archivos dot, entonces haz lo que hacen todas las personas: colócalas en un directorio y agrega enlaces simbólicos a este directorio desde tu $HOME.

+0

Anteriormente vinculé todos los archivos de configuración desde el directorio 'rc' a mi directorio de inicio. Para omitir estos enlaces, creé la variable 'RC' y la mayoría de mis programas la usan. Por cierto, el '~' se expande y cuando usas git config alias ... puedes usar comandos de shell y expandir variables. – SvenK

+3

@SvenK: Por favor, lea 'git-config (1)': El hecho de que 'git-config (1)' expande '~' no 'automágicamente' significa que la expansión variable o incluso comandos de shell son compatibles, también. '~' es * manejado específicamente * por 'git-config' si y solo si un valor * se recupera con el especificador de tipo' --path' *. Esta es la * única * clase de expansión soportada por 'git-config'. He actualizado mi respuesta para incluir las secciones relevantes de 'git-config (1)' – lunaryorn

+2

Esto es un poco frustrante, ya que no puedo simplemente especificar mi http [s]? _ Proxy variable de entorno para todo mi sistema; Tengo que por alguna razón especificarlo en mi gitconfig también. Es bastante molesto para las personas que no trabajan desde casa o una pequeña tienda de desarrollo, y/o que se sientan en diferentes redes dependiendo de dónde estén trabajando. –

15

Uso bash scripts en mi configuración para habilitar la expansión de variables. Sólo exportar la variable que necesita en su .bashrc y utilizarlo en los guiones:

En mi ~/.bashrc:

export TESTVARIABLE="hello" 

En mi ~/.gitconfig:

[alias] 
    test = !bash -c '"echo \"Value: $TESTVARIABLE\";"' 

En mi indicador bash:

bash> git test 
    Value: hello 

Th Otra forma de hacerlo es agregar un comando git config en el rc de tu caparazón. Yo, por ejemplo, tener en mi .bashrc:

git config --global user.name "[email protected]$HOSTNAME" 

que tienen la misma configuración en todas mis máquinas, y añadiendo esto puede distinguir entre compromete de diferentes máquinas. Usted podría hacer lo mismo y agregar a su shell rc:

export RC="$HOME/rc" 
git config --global core.excludesfile "$RC/globalgitignore" 
+1

gospes: probé el primer método que sugirió para el campo de correo electrónico. El correo electrónico resultante (que veo en la información de confirmación) es igual a la cadena " ". Ideas? – tivoni

+8

@tivoni el ejemplo de @gospes solo funciona porque está en' git alias' grupo –

Cuestiones relacionadas