¿Es posible incluir un archivo en su .gitconfig

245

Me gustaría incluir un archivo en mi .gitconfig que tenga mi configuración de github. ¿Es esto posible?

¿Puedo hacer algo como esto?

[core]
    include = /path/to/file
David Reynolds
fuente
3
"No quiero incluir los detalles de github en él, por eso me gustaría incluirlos de algún modo desde un archivo externo": para eso es precisamente el archivo de configuración global. ¿Hay alguna razón para no usarlo en su caso?
VonC
11
Sí, porque quiero publicar .gitconfig en un repositorio de git y no quiero que alguien robe mis credenciales de github.
David Reynolds el
No te sigo: tu archivo gitconfig regular se publicará en github, pero sin ninguna configuración de github. ¿Por qué? Porque esos estarían en su archivo de configuración global ( ~/.gitconfig), es decir, no se enviarían a su repositorio de github. Cuando escribe ' git config', lo que ve es la concatenación del archivo de configuración 3 (repo, global y system). Solo se empuja el archivo de configuración de repositorio. Los otros 2 se quedan locales.
VonC
90
Parece que todo el mundo perdió el punto de esta pregunta. Obviamente, David quiere subir un repositorio de todos sus archivos de puntos (bashrc, gemrc, etc.) INCLUYENDO su .gitconfig para que pueda tener todas sus configuraciones en todas sus máquinas. Una forma de insertar partes de un archivo .gitconfig al incluir e ignorar las entradas privadas es lo que él (y yo, para el caso) busca
Bo Jeanes el
55
@bjeanes: precisamente! Sin embargo, todavía no he encontrado una manera de hacerlo.
David Reynolds el

Respuestas:

302

Git (1.7.10+) ahora admite esta sintaxis en .gitconfig:

[include]
    path = /path/to/file

Consulte aquí para obtener una descripción detallada del cambio de git y sus casos extremos.

Por cierto, vale la pena señalar un par de sutilezas:

  1. La expansión variable de entorno, por ejemplo $HOME, no es compatible. (La expansión de ~apareció en Git 1.7.10.2.)

  2. Si se especifica una ruta relativa, entonces es relativa al archivo .gitconfig que tiene la [include]instrucción. Esto funciona correctamente incluso a través de encadenamiento incluye, por ejemplo, ~/.gitconfigpuede tener:

    [include]
        path = subdir/gitconfig
    

    y subdir/gitconfigpuede tener:

    [include]
        path = nested_subdir/gitconfig
    

    ... lo que hará subdir/nested_subdir/gitconfigque se cargue.

  3. Si git no puede encontrar el archivo de destino, silenciosamente ignora el error. Esto parece ser por diseño.

Mike Morearty
fuente
77
En realidad no lo necesitas ~. Esto es porque su .gitconfig-archivo todavía tiene que residir en ~/.gitconfiguna ruta relativa en la configuración implicaría ~...
robustus
2
La expansión ~/ $HOMEes en realidad a partir de git describe --contains 4c0a89fc-> v1.7.10.2~12^2(es decir, v1.7.10.2o posterior), notable ya que parece que Debian 7 y Ubuntu Quantal se lanzarán con v1.7.10.4.
FauxFaux
1
¿Esto soporta globos? por ejemplo, ruta = ~ / gitconfig.d / *?
Bret
1
@Bret no, esto no es compatible con globos.
Mike Morearty
8
Tenga en cuenta que las configuraciones incluyen esta manera no se mostrará cuando se da un archivo específico (es decir, con --global, --localo --file), a menos que explícitamente --includes(como git config --global --includes --list).
Franklin Yu
16

Actualización 2012:

Ver la respuesta de Mike Morearty :

Incluye

Puede incluir un archivo de configuración de otro configurando la include.pathvariable especial al nombre del archivo que se incluirá.
El archivo incluido se expande inmediatamente, como si su contenido se hubiera encontrado en la ubicación de la directiva de inclusión.
Si el valor de la include.pathvariable es una ruta relativa, se considera que la ruta es relativa al archivo de configuración en el que se encontró la directiva de inclusión.
El valor de include.pathestá sujeto a la expansión de tilde: ~/se expande al valor de $HOMEy ~user/al directorio de inicio del usuario especificado.


No lo creo.

Prefiero poner esa configuración en el ~/.gitconfigarchivo

Archivo de configuración específico del usuario. También llamado archivo de configuración "global".

De esa forma, completa el archivo específico del proyecto .gitconfig, sin que se publique cuando se envía a GitHub. Consulte también esta respuesta SO para obtener más información sobre el archivo de configuración global.
Git tiene 3 archivos de configuración .


bjeanes agrega en los comentarios:

Parece que todo el mundo perdió el punto de esta pregunta.
David, obviamente, quiere empujar hacia arriba un acuerdo de recompra de todos sus archivos de puntos ( bashrc, gemrc, etc.) incluyendo a su .gitconfigpara que pueda tener todos sus ajustes en todos sus máquinas.
Una forma de insertar partes de un .gitconfigarchivo al incluir e ignorar las entradas privadas es lo que él (y yo, para el caso) busca.

Una posible forma sería usar un controlador de filtro de manchas / limpieza para descifrar / cifrar un archivo con información confidencial privada (vea este hilo ), para completar un archivo local como ~ / .gitconfig con las partes descifradas que son relevantes para ese expediente.

De esa manera, puede tener un repositorio de Git con todos sus archivos de puntos, más un archivo con información encriptada para descifrar y agregar a dichos archivos de puntos.

texto alternativo

En .gitattributes(o .git/info/a..) uso:

myPrivateInfosFile filter=gpg diff=gpg

En su archivo recon .config:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

(una solución basada en GPG significa, por supuesto, que ha comunicado sus claves privadas / públicas por otro medio en la computadora de destino donde desea restaurar todos sus archivos de puntos clonando este repositorio especial)

En realidad, en su caso, el script de manchas debe completarse, ya que debe, después de descifrar ese archivo, continuar y agregar partes relevantes a su ~/.gitconfigarchivo global (a menos que sobrescriba el archivo de configuración global con otra ubicación ) u otros archivos de puntos para eso importar.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (los inconvenientes de gpg se discuten más adelante en este hilo ) (esto es diferente de tener un repositorio de Git cifrado completo, como se discute aquí )

VonC
fuente
55
Quiero publicar mi archivo .gitconfig básico en un repositorio de git, pero no quiero incluir los detalles de github en él, por eso me gustaría incluirlos de alguna manera desde un archivo externo.
David Reynolds el
10

Puede cargarlo desde la línea de comandos:

$ git config --local include.path "/path/to/.gitconfig"

Utilice en su "$PWD"/.gitconfiglugar, si desea cargar el archivo desde el directorio actual.

Después de ejecutar el comando anterior, las siguientes líneas se agregan a su .git/configarchivo:

[include]
        path = /path/to/.gitconfig
kenorb
fuente
2

Creo que puedes lograr esto usando la herramienta hub de defunkt . Se trata de un envoltorio para el comando git que entre otras cosas, le permite tener GITHUB_USERy GITHUB_TOKENvariables de entorno. Lo cual anulará la configuración en el .gitconfigarchivo local .

Luego, para que sea transparente, el usuario al que apuntaste alias alias git=huben su configuración ZSH . Debería poder luego obtener un archivo local donde establezca sus variables de entorno y envíe su repositorio al mundo público con toda su información privada intacta.

** NOTA para usuarios de homebrew en OSX, puede instalar la herramienta a través de brew install hub.

Geoff Lanotte
fuente