Actualizar y confirmar solo los permisos de un archivo usando el control de versiones de git

187

Acaba de convertir un some.sharchivo en un ejecutable ( chmod 755 ...), los permisos se actualizaron pero no el contenido. ¿Hay alguna manera de confirmar el archivo en git, para que el bit ejecutable se restaure / establezca en clone / checkout / pull ?

Actualización: ¿cómo puedo hacer un seguimiento de que se enviaron los nuevos permisos github?

BreakPhreak
fuente

Respuestas:

190

Por defecto, git actualizará los permisos de ejecución de archivos si los cambia. No cambiará ni rastreará ningún otro permiso.

Si no ve ningún cambio al modificar el permiso de ejecución, probablemente tenga una configuración en git que ignore el modo de archivo.

Busque en su proyecto, en la .gitcarpeta del configarchivo, y debería ver algo como esto:

[core]
    filemode = false

Puede cambiarlo trueen su editor de texto favorito o ejecutar:

git config core.filemode true

Entonces, debería poder confirmar normalmente sus archivos. Solo confirmará los cambios de permiso.

Vincent B.
fuente
¡gracias! ¿Cómo puedo rastrear que se enviaron los cambios de permiso github?
BreakPhreak
2
Puede verlo cuando ve un archivo (por ejemplo, en el archivo gitignore de Rails , encontrará 100644 como el permiso de archivo)
Vincent B.
8
Realizar cambios de permisos en Windows con git (en realidad cambiar los permisos de archivo y confirmar
fooMonster
39
Esta respuesta es incorrecta! Git solo rastrea si un archivo es ejecutable o no. No rastrea otro permiso de archivo como de escritura o legible. Lea stackoverflow.com/a/11231682/2311074 para más información.
Adam
Para mí, la tormenta web no captó el cambio, pero en git status, veo cambios ...
Townsheriff
193

El artículo de @fooMonster funcionó para mí

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Como puede ver, el archivo tiene permiso 644 (ignorando los 100). Nos gustaría cambiarlo a 755:

# git update-index --chmod=+x script.sh

cometer los cambios

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh
ewwink
fuente
77
Cabe señalar que en realidad debe usar '-x / + x'. No puede establecer ningún otro permiso o una máscara de bits.
Devolus
el uso de la nota git commit -ano hizo nada por mí, sin embargo, configurar el mensaje en la línea de comando lo hizo. Un poco peculiar
JonnyRaa
El orden de comando debe ser: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin
30

No funciona para mi

El modo es verdadero, los permisos del archivo han cambiado, pero git dice que no hay trabajo que hacer.

git init
git add dir/file
chmod 440 dir/file
git commit -a

El problema parece ser que git reconoce solo ciertos cambios de permisos.

Oteo
fuente
51
Correcto: gitrealmente solo rastrea si un archivo es ejecutable o no, no el conjunto completo de permisos * nix. Entonces tendría que cambiar un archivo entre ejecutable / no para que piense que ha cambiado algo que vale la pena cometer ...
twalberg
No pude encontrar documentación que sea clara: ¿qué activador posterior a la acción puedo usar quizás para configurar los permisos en consecuencia?
Oteo
2
Bueno, hay un post-checkoutenlace git, que cubriría algunos casos, pero no estoy seguro de si eso cubriría todas las cosas posibles que actualizan los archivos en su árbol de trabajo. Puede que sea mejor tener un script de shell adicional en su repositorio que establezca las cosas en consecuencia. Por otra parte, hay un par de proyectos por ahí que aumentan gital repositorio de metadatos, pero nunca he probado ninguno de ellos ...
twalberg
1
Cambié los permisos de archivo a 777 y lo hice git update-index --refresh, pero se muestra la diferencia old mode 100644 new mode 100755. No actualizó todos los permisos
hudac
ver @tishma responde aquí stackoverflow.com/questions/14557106/… . Esto es lo que funcionó para mí
gary69