git executable file-permissions

Aplicar automáticamente "git update-index--chmod=+ x" a los archivos ejecutables



executable file-permissions (5)

Aquí hay una secuencia de comandos para aplicar automáticamente "git update-index --chmod + x" a los archivos ejecutables:

for f in `find . -name ''*.sh'' -o -regex ''./s?bin/[^/]+'' -o -regex ''./usr/sbin/[^/]+'' -o -regex ''./usr/lib/[^/]+'' `;do ( cd `dirname $f` && git update-index --chmod=+x `basename $f` ) done

Con frecuencia agrego bash scripts a mi repositorio git, y los scripts tienen permisos ejecutables en el sistema de archivos linux antes de git add . Pero después de enviar los archivos agregados a un repositorio remoto y arrastrarlos a otra ubicación, los archivos se muestran con permisos no ejecutables. Parece que hay dos formas de corregir el problema:

1. chmod u+x $script git commit -am "fixing the script permissions... again..."

o

2. git update-index --chmod=+x $script

En lugar de arreglar los permisos cada vez, hay una manera de que git simplemente mire los permisos de archivo en el script durante git add , reconozca que "hey, este es un archivo ejecutable". ¿Y agregarlo al repositorio con los permisos de ejecución directamente?


Hay varias maneras de hacer eso.

  1. Alias ​​de Git
  2. Alias ​​de Bash
  3. O incluso combinar bash y git alias
  1. Alias ​​de Git

    Siempre puedes usar bash dentro de tu alias de git.

    • Abre tu configuración git:

      vim ~/.gitconfig

    • Agregue una sección de alias (si no existe):

      [alias] addscr = !sh -c ''if [[ ${0: -3} == ".sh" ]]; then git update-index --chmod=+x $0; git add $0''

  2. Alias ​​de Bash

    • Edita tu archivo de perfil de bash:

      vim ~/.bashrc

    • Agregue esto al final del archivo:

      function gitadd(){ if [[ ${1: -3} == ".sh" ]] then git update-index --chmod=+x $1 fi git add $1 } alias gitadd=''gitadd''

  3. Combina git y bash alias

    • Edita tu archivo de perfil de bash:

      vim ~/.bashrc

    • Agregue esto al final del archivo:

      function checkShellFile(){ return ${1: -3} == ".sh" } alias gitadd=''checkShellFile ? git addsrcipt "$1" : && git add "$1"''

    • Edita tu archivo de configuración git:

      vim ~/.gitconfig

    • Agregue una sección de alias (si no existe):

      [alias] addscript = !sh -c ''git update-index --chmod=+x $0 && git add $0''

Ninguno de los anteriores ha sido probado


No creo que esto se pueda hacer con el comando git add , pero es posible que pueda ejecutar un script justo después de ejecutar el comando git commit , pero antes de que se cree realmente el commit.

Echa un vistazo al gancho de pre-commit.

http://git-scm.com/book/en/Customizing-Git-Git-Hooks

Básicamente, simplemente cree un archivo en su carpeta .git / hooks / llamado pre-commit. (Debería haber muestras ya en su carpeta de ganchos, cámbielas para eliminar ".sample" al final para activar una).

Hay un gotcha. Asegúrese de que su secuencia de comandos ejecute git stash -q primero para que trabaje en las versiones reales de los archivos.


git 2.9.X / 2.10 (Q3 2016) trae chmod a git add same!

Ver commit 4e55ed3 (31 de mayo de 2016) por Edward Thomson ( ethomson ) .
Ayudado por: Johannes Schindelin ( dscho ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit c8b080a , 06 jul 2016)

add : agregar --chmod=+x / --chmod=-x opciones

El bit ejecutable no se detectará (y, por lo tanto, no se establecerá) para las rutas en un repositorio con core.filemode configurado en falso, aunque los usuarios pueden desear agregar archivos como ejecutables para la compatibilidad con otros usuarios que tienen core.filemode funcionalidad
Por ejemplo, los usuarios de Windows que agregan scripts de shell pueden desear agregarlos como ejecutables para la compatibilidad con los usuarios que no son de Windows.

Aunque esto se puede hacer con un comando de plomería ( git update-index --add --chmod=+x foo ), enseñar el comando git-add permite a los usuarios configurar un archivo ejecutable con un comando con el que ya están familiarizados .

Puede ver el origen de esta nueva característica en " ¿Cómo crear permisos de modo de ejecución de archivos en Git en Windows? " (Febrero de 2011)


Una solución sin scripts de bash de lujo :

  1. Establezca fileMode = true en su archivo .git/config (o ejecutando git config core.filemode true como otros lo han señalado)
  2. Cambie el bit ejecutable en los permisos del archivo y confirme este cambio. ( chmod u+x $script como usted señaló). Sólo tienes que hacerlo una vez.
  3. Empuje hacia el control remoto

La próxima vez que salga de allí, git establecerá el bit ejecutable confirmado en el archivo. También tuve problemas similares, esto los resolvió.

fileMode = true le dice a git que fileMode = true lo único sobre los permisos que puede: el bit ejecutable. Esto significa que los cambios en el bit ejecutable serán reconocidos por git como cambios en el árbol de trabajo y esos cambios se almacenarán en el repositorio con su próxima confirmación.

Una vez que haya confirmado el bit ejecutable deseado, también puede restablecer su modo de fileMode a false para que la próxima vez git no lo moleste con dichos cambios cuando no quiera confirmarlos.