repositorio - git push tag
Distribución de la configuración de git con el código (4)
Al tratar de estandarizar la plataforma para los desarrolladores, una de mis necesidades sería comprometer el .git/config
para que todos tengan la misma configuración CRLF sin olvidar configurarlo a mano.
¿Cómo configuro esto?
Estoy un poco preocupado por toda esta negatividad contra autocrlf
. ¿Por qué no eliminar esta característica si no funciona? O los creadores de esta función son malentendidos o hicieron un experimento fallido con ella y debería eliminarse para evitar que más personas pierdan el tiempo (leyendo la página del hombre oscuro, haciendo preguntas, personas respondiendo esas preguntas, etc.).
El .git/config
puede ser reemplazado localmente por ~/.gitconfig
.
Por lo tanto, como parte del script de compilación, Makefile o provision, puede proponer el cambio para los usuarios en su ~/.gitconfig
, o cargar el script local .gitconfig
través de git config
.
Por ejemplo, cree un nuevo .gitconfig
con algunas configuraciones y cárguelo de la siguiente manera:
git config --local include.path "/path/to/.gitconfig"
o solicite a los usuarios que tengan en su ~/.gitconfig
estas líneas:
[include]
path = .gitconfig
Si está utilizando Vagrant como parte de su distribución de código, puede cargar git config desde Vagrantfile
de la siguiente manera:
system(''GIT_TRACE=1 git config --local include.path "$(git rev-parse --show-toplevel)/git/gitconfig"'');
a continuación, git/gitconfig
su configuración de git/gitconfig
en git/gitconfig
, de modo que cada vez que los usuarios ejecuten el aprovisionamiento de su VM, este archivo se cargue automáticamente para su git en el equipo host (p. ej. para exigir que core.filemode
esté deshabilitado, Windows no tendrá cualquier problema con los permisos de archivos).
Para forzar terminaciones de línea para los usuarios, debe usar .gitattributes
en .gitattributes
lugar, que debería funcionar de manera .gitattributes
. Sintaxis de muestra para usar finales de línea tipo Unix ( LF
):
# Drupal git normalization
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# @see https://www.drupal.org/node/1542048
# Define text file attributes.
# - Treat them as text.
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
# - Detect whitespace errors.
# - Exposed by default in `git diff --color` on the CLI.
# - Validate with `git diff --check`.
# - Deny applying with `git apply --whitespace=error-all`.
# - Fix automatically with `git apply --whitespace=fix`.
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
# Auto-detect text files, ensure they use LF (not recommended).
#* text=auto eol=lf
# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.gz -text diff
Puede ser una mejor forma de usar el hardlink :
En el sistema * nix o OS X:
ln .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
En Windows en sistema de sistema de archivos NTFS:
mklink /H git-config .git/config
git add git-config
git commit -m "Now tracking git config file"
Pero debemos recordar que al clonar el proyecto para aplicar las configuraciones para realizar el procedimiento inverso:
En el sistema * nix o OS X:
git clone FROM_PROJ_URL
rm .git/config
ln git-config .git/config
En Windows en sistema de sistema de archivos NTFS:
git clone FROM_PROJ_URL
del .git/config
mklink /H .git/config git-config
Si está utilizando un sistema operativo de la familia Unix, recomendaría simplemente crear un enlace simbólico.
ln -s .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
Siempre he encontrado la propiedad autocrlf
config problemática. (como se expresa en mi respuesta Git 1.6.4 beta en Windows (msysgit) - terminación de línea Unix o DOS )
- no solo hace algunas combinaciones complicadas
- puede variar según la carcasa utilizada en un entorno
- también tiene problemas con el estado de git
- y con la importación svn .
Nota: msysgit issue 538 para establecerlo en true (que es el valor predeterminado establecido por el instalador msysgit), pero no estoy convencido.
Preferiría una de las siguientes tres soluciones para:
- configurando un estilo de fin de línea
- hacer que la configuración se propague a través de los diferentes repositorios Git
1. Uso de la configuración nueva configuración core.eol
(1.7.2+)
Establece el tipo de terminación de línea para usar en el directorio de trabajo para los archivos que tienen establecida la propiedad de texto.
Las alternativas son ''lf
'', ''crlf
'' y ''native
'', que usa la terminación de línea nativa de la plataforma.
El valor predeterminado es nativo.
2. un pago / cheque .gitattribute
. Consulte la página de crlf
: crlf
o core.autocrlf
es la forma de registrar en un archivo .gitattributes
lo que anteriormente era un atributo de configuración local.
3. un controlador de filtro de atributo git que puede:
- hacer cumplir cualquier tipo de estándar de formato que desee establecer
- aplicar esos estándares a ciertos archivos / directorios
- ser grabado como un archivo de configuración (
.gitattributes
) capaz de ser empujado a cualquier lugar.