Almacenar git config como parte del repositorio

147

Estoy usando filtros para destrozar archivos durante el pago como se describe aquí . Ahora el problema es que la definición del filtro solo se almacena en mi archivo de configuración local:

$ cat .git/config
....
[filter "dater"]
        smudge = /home/.../expand_date
        clean = perl -pe \"s/\\\\\\$Date[^\\\\\\$]*\\\\\\$/\\\\\\$Date\\\\\\$/\"

Si mis compañeros de trabajo quieren beneficiarse de esta Dateexpansión, deben copiar la definición de mi filtro. Y si lo cambio, necesito avisarles, etc.

Entonces, ¿puedo almacenar esta parte de definición de filtro .git/configen el repositorio y hacer que git la use?

Zaar Hai
fuente
Puede encontrar este enlace útil para compartir automáticamente una configuración de todo el equipo.
mljrg

Respuestas:

163

Hay 3 ámbitos compatibles de .gitconfigarchivo: --system, --global, --local. También puede crear un archivo de configuración personalizado e incluirlo en uno de los archivos compatibles.

Para sus necesidades personalizadas : es la elección correcta. En lugar de escribir su filtro .git/config, debe guardarlo en un .gitconfigarchivo en la raíz del repositorio:

your-repo/
│
├── .git/
│   ├── config
│
├── .gitconfig
│

Crea el .gitconfigcon tu filtro y confirma los cambios. Entonces sus colegas siempre lo mantendrán actualizado, pero tendrán que incluirlo manualmente. No es posible incluir automáticamente su archivo de configuración personalizada solo a través de git, porque crea una vulnerabilidad de seguridad.

Para aplicar esta configuración para un único repositorio, cada usuario deberá ejecutar el siguiente comando en your-repo/:

git config --local include.path ../.gitconfig

Tenga cuidado de no almacenar datos personales en la costumbre .gitconfig, como user.*mantenerlos en su global .gitconfig.

Alexander Yancharuk
fuente
40
Quiero evitar notificar a cada posible usuario que necesita incluir repositorios .gitconfigen el suyo ~/.gitconfig. Nadie lo recordará. ¿Hay alguna manera de hacer que git SIEMPRE lea los repositorios .gitconfig?
Zaar Hai
9
@ZaarHai: Supongo que no, porque eso sería peligroso. (Imagine clonar un repositorio que alias comandos con algo "interesante", por ejemplo, exportar el contenido de su directorio de inicio). Si tiene algo así como un configurescript o similar que los usuarios deben ejecutar, puede hacer que establezca la inclusión (o solicite al usuario que lo haga).
Hasturkun
44
@HenryBlyth parece haber una --fileopción activada git config, luego puede configurarla para que apunte a su repositorio .gitconfig. Todavía no lo he probado, pero parece responder a tu pregunta. Puedes leerlo en los documentos. git-scm.com/docs/git-config#FILES
theUnknown777
12
Sea genial si Git no asumió que está escribiendo código distribuido fuera de su organización donde debe preocuparse por las amenazas de seguridad. A veces, la usabilidad y la automatización del sistema tienen una prioridad más alta que la seguridad.
Geordie
2
Puede agregar furtivamente el comando a una tarea (suponiendo que esté utilizando un corredor de tareas) que su equipo usa habitualmente.
Mieszko
19

No puede usar el .gitconfigarchivo en un repositorio de git de forma predeterminada, pero puede vincularlo para que la configuración de git sea versionada.

Puedes vincularlo así:

[include]
  path = ../.gitconfig

He creado un script simple gitconfig.shque lo hace por usted (mucho más rápido que copiar) + .gitconfigarchivo simple , así que si lo desea, eche un vistazo a este repositorio https://github.com/HoBi/dotfiles .


EDITAR : he eliminado el archivo, pero puedes encontrarlo aquí https://github.com/tenhobi/dotfiles/blob/7e4376c006c508370b82bc7bd37173fab51dbd01/git/.gitconfig.sh

tenhobi
fuente
@XmlmXmlmX corregido. :-)
tenhobi
@HoBi parece que ahora ha eliminado su gitconfig.sh de GitHub, ¿alguna razón por la que ya no lo quería?
Novato C
1
@NoviceC Existe el archivo si lo quieres. github.com/HoBi/dotfiles/blob/… He llegado a creer que no debe almacenar .gitconfig o gitconfig.sh en su proyecto git: estas son configuraciones personales y deben almacenarse en su configuración global en la ~/carpeta. Y todos pueden tener diferentes necesidades, entonces, ¿por qué molestar a todos con su configuración en git repo? :-)
tenhobi
@tenhobi hay algunas configuraciones que pueden ser interesantes para que todos las compartan en un proyecto. Lo haré por alias, con flujo de codificación de proyecto
Z. Khullah