Quiero que git confirme un archivo .sh, pero quiero que sea ejecutable cuando revise ese mismo archivo en otro servidor.
¿Hay alguna manera de hacerlo sin chmod u + x manualmente ese archivo en los servidores que verifican el archivo?
De acuerdo con la documentación oficial , puede establecer o eliminar el indicador "ejecutable" en cualquier archivo rastreado utilizando el update-index
subcomando.
Para establecer la bandera, use el siguiente comando:
git update-index --chmod=+x path/to/file
Para eliminarlo, use:
git update-index --chmod=-x path/to/file
Bajo el capó
Si bien esto parece el sistema de permisos de archivos Unix normal, en realidad no lo es. Git mantiene un "modo" especial para cada archivo en su almacenamiento interno:
100644
para archivos regulares100755
para ejecutablesPuede visualizarlo usando el ls-file
subcomando, con la --stage
opción:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
De forma predeterminada, cuando agrega un archivo a un repositorio, Git intentará respetar sus atributos del sistema de archivos y establecerá el modo de archivo correcto en consecuencia. Puede deshabilitar esto configurando la core.fileMode
opción en falso:
git config core.fileMode false
Solución de problemas
Si en algún momento el modo de archivo Git no está configurado pero el archivo tiene el indicador de sistema de archivos correcto, intente eliminar el modo y configúrelo nuevamente:
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
Prima
Comenzando con Git 2.9, puede organizar un archivo Y establecer la bandera en un comando:
git add --chmod=+x path/to/file
La respuesta de Antwane es correcta, y esto debería ser un comentario, pero los comentarios no tienen suficiente espacio y no permiten el formateo. :-) Solo quiero agregar que en Git, los permisos de archivo se registran solo 1 como
644
o755
(deletreado (100644
y100755
; la100
parte significa "archivo normal"):El primero, 644, significa que el archivo no debe ser ejecutable, y el segundo significa que debe ser ejecutable. La forma en que se convierte en modos de archivo reales dentro de su sistema de archivos depende en cierta medida del sistema operativo. En sistemas tipo Unix, los bits se pasan a través de su
umask
configuración, que normalmente sería022
eliminar el permiso de escritura de "grupo" y "otro", o002
eliminar el permiso de escritura solo de "otro". También podría serlo077
si está especialmente preocupado por la privacidad y desea eliminar los permisos de lectura, escritura y ejecución de "grupo" y "otro".1 Las versiones extremadamente tempranas de Git guardaron los permisos de grupo, de modo que algunos repositorios tienen entradas de árbol con modo
664
. Modern Git no lo hace, pero como ninguna parte de ningún objeto se puede cambiar, esos viejos bits de permisos aún persisten en los viejos objetos de árbol.El cambio para almacenar solo 0644 o 0755 estaba en commit e44794706eeb57f2 , que es anterior a Git v0.99 y data del 16 de abril de 2005.
fuente
e44794706eeb57f2ee38ed1604821aa38b8ad9d2
, es decir, anterior a Git versión 0.99.