"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:
La expansión variable de entorno, por ejemplo $HOME, no es compatible. (La expansión de ~apareció en Git 1.7.10.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.
Si git no puede encontrar el archivo de destino, silenciosamente ignora el error. Esto parece ser por diseño.
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.
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).
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.
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 .
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.
(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.
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.
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.
~/.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.Respuestas:
Git (1.7.10+) ahora admite esta sintaxis en
.gitconfig
: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:
La expansión variable de entorno, por ejemplo
$HOME
, no es compatible. (La expansión de~
apareció en Git 1.7.10.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,~/.gitconfig
puede tener:y
subdir/gitconfig
puede tener:... lo que hará
subdir/nested_subdir/gitconfig
que se cargue.Si git no puede encontrar el archivo de destino, silenciosamente ignora el error. Esto parece ser por diseño.
fuente
~
. Esto es porque su .gitconfig-archivo todavía tiene que residir en~/.gitconfig
una ruta relativa en la configuración implicaría~
...~
/$HOME
es en realidad a partir degit describe --contains 4c0a89fc
->v1.7.10.2~12^2
(es decir,v1.7.10.2
o posterior), notable ya que parece que Debian 7 y Ubuntu Quantal se lanzarán conv1.7.10.4
.--global
,--local
o--file
), a menos que explícitamente--includes
(comogit config --global --includes --list
).Actualización 2012:
Ver la respuesta de Mike Morearty :
Incluye
No lo creo.
Prefiero poner esa configuración en el
~/.gitconfig
archivoDe 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:
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.
En
.gitattributes
(o.git/info/a..
) uso:En su archivo recon .config:
(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
~/.gitconfig
archivo 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í )
fuente
Puede cargarlo desde la línea de comandos:
Utilice en su
"$PWD"/.gitconfig
lugar, 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/config
archivo:fuente
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_USER
yGITHUB_TOKEN
variables de entorno. Lo cual anulará la configuración en el.gitconfig
archivo local .Luego, para que sea transparente, el usuario al que apuntaste alias
alias git=hub
en 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
.fuente