Permisos de archivo Git en Windows


173

He leído algunas preguntas sobre los permisos de archivos en Git y todavía estoy un poco confundido. Tengo un repositorio en GitHub bifurcado de otro. Después de la fusión, deben ser idénticos. Sin embargo:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Intenté cambiar los permisos de los archivos, pero no altera los resultados de la diferencia.

Respuestas:


347

Encontré la solución de cómo cambiar los permisos (también) en Windows aquí: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Por ejemplo, el siguiente comando agrega el permiso de ejecución del usuario a un archivo arbitrario:

git update-index --chmod=+x <file>

66
+1: exactamente lo que necesitaba para asegurarme de que los scripts de shell que confirmo desde Windows (donde he core.filemodeconfigurado false) realmente tienen el bit de ejecución establecido.
tomlogic

En mi caso, también agregué una nueva línea al archivo, y solo entonces pude comprometerme
oshai

55
En Windows, usando git-bash, que necesitaba una --addbandera para la ejecución por alguna razón: git update-index --add --chmod=+x <file>. Después de esto, el archivo ya estaba en el escenario con el chmod
Jefferson Quesado

Ya no tiene ningún efecto, ni en git bash ni en cmd.exe prompt.
Ben

107

De otra pregunta aquí en stackoverflow: ¿Cómo hago que Git ignore los cambios en el modo de archivo (chmod)?

Tratar:

git config core.filemode false

Desde git-config (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

Gracias. Yo también lo vi. Lo probé y no hizo ninguna diferencia.
Synesso

3
Tuve problemas similares al OP y no pude hacer cambios sin importar cómo hardintenté restablecer. Esto hizo el truco para mí.
Jo-Herman Haugholt

11
[proyecto] /. git / config puede contener la misma configuración y anulará ~ / .gitconfig. Si está intentando configurarlo globalmente, asegúrese de que no se anule localmente.
Binary Phile

1
Creo que esto también es necesario en NTFS, lamentablemente.
Marc.2377

1
¡Esa es la respuesta!
Andrew Surdu

29

Práctico one-liner para Git Bash:

find . -name '*.sh' | xargs git update-index --chmod=+x

Marcará todos los .sharchivos como ejecutables. Después de eso, solo tienes que hacerlo git commit.


2
Pequeña corrección para @ benoit-blanchon one-liner ... se debe citar el .sh. encontrar . -nombre ' .sh' | xargs git update-index --chmod = + x
Steven el fácilmente divertido

Tienes razón, edité la respuesta. Gracias @SteventheEasilyAmused.
Benoit Blanchon

15

Si utiliza Cygwin git (o Linux git, supongo), existe una buena posibilidad de que su configuración core.filemode se haya establecido en el nivel del proyecto en $ projdir / .git / config. Descubrí que tenía que hacer lo siguiente para que mi git Cygwin y mi git de Windows coexistieran bien en un sistema de archivos de Windows sin que aparezcan cambios de modo de archivo inexistentes todo el tiempo:

  • elimine la configuración de línea core.filemode en $ projdir / .git / config
  • en Windows git, ejecute "git config --global core.filemode false"

Esto permite que mi git de Cygwin continúe viendo cambios en el modo de archivo, que generalmente son relevantes, mientras le indica al git de Windows que ignore los cambios en el modo de archivo que ve, que generalmente son falsos positivos.


6

Primero verifique los permisos del archivo usando el siguiente comando.

git ls-files --stage

Luego cambie los permisos. Aquí "x" representa los permisos de ejecución.

git update-index --chmod=+x 'scriptname.ext'

Ahora vuelva a verificar los permisos.

git ls-files --stage

==============================================

si está utilizando una PC con Windows, pero está implementando en una máquina Linux. Ejecute el siguiente comando en primer lugar para que sea compatible con la máquina Linux

dos2unix scriptname.ext scriptname.ext


¿No hay forma de hacer algo así git update-index --chmod=1777 'scriptname.ext'?
Alex Barker

¿Navegó hasta la ruta, donde existe el archivo de script? @alex
Sireesh Yarlagadda

5

Lo arreglé cambiando los permisos de archivo en Ubuntu, commit, push y todo OK. Parece que simplemente no funcionaría con msysgit en Windows / NTFS.


No puedo recomendar GitHub para Windows. Maravillosa interfaz y un shell realmente agradable, incluso hice la configuración de la clave ssh relativamente fácil y la instalación de git flow.
Sangoku
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.