2012-01-27 10 views
32
$ git add test-file 

$ git commit -m 'first commit' 
create mode 100644 test-file 

$ git push 

$ git update-index --add --chmod=+x test-file 

$ git commit -m 'change mode' 
mode change 100644 => 100755 test-file 

$ git push 

Después de que si vas a GitHub todavía demuestra que 100.644 no importa qué.¿Cómo cambiar el modo de archivo en GitHub?

Respuesta

28

MSYS no es el problema. Incluso si MSYS chmod no funciona (no funciona), Git tiene una forma integrada de evitar ese problema, es decir, git update-index --chmod=+x. Que quede claro que git update-index solo se entromete con el índice (área de transición), no con el repositorio local (directorio de trabajo).

Estoy convencido de que el problema es con GitHub. En GitHub si un archivo es inicialmente empujado con el modo 100775, todo está bien. Si un archivo es inicialmente empujado como 100644, causa un problema. Los intentos de cambiar el modo de archivo tendrán éxito con git add, tendrá éxito con git commit, tendrá éxito con git push, e incluso aparecerá en el historial del archivo GitHub, pero no se reflejará en la página "blob/master" en GitHub.

actualización

Desde: Petros Amiridis (GitHub personal)

Asunto: ¿Cómo cambiar el modo de archivo en GitHub?

Tengo algunas buenas noticias. Nuestro increíble equipo acaba de confirmar que se trata de un error de almacenamiento en caché en nuestro extremo. Nuestro equipo ha implementado una solución.

11

Creo que el problema es que MSYS, sobre el que se basa la aplicación de Windows de git, no maneja adecuadamente chmod.

(EDIT: La otra respuesta dice MSYS no es el problema, lo que ciertamente parece plausible.)

Mi conjetura es que el comando

git update-index --add --chmod=+x test-file 

obras de actualización de los metadatos en el repositorio local (que debería funcionar) y cambiar los permisos en el archivo (que no), poniendo el repositorio local en un estado incoherente.

Usted debe ser capaz de retirarse de esta deshaciendo el update-index:

git update-index --add --chmod=-x test-file 
git commit -m 'change mode back' 
git push 

para obtener el repositorio de nuevo en un estado coherente, y luego hacer el cambio en una copia que no sea Windows del repositorio. Si no tiene acceso a un sistema Linux u otro similar a Unix, Cygwin incluye git (no de forma predeterminada, pero puede instalarlo a través del setup.exe) y le proporciona un entorno en el que chmod realmente funciona. El shell predeterminado para Cygwin es bash, por lo que el entorno debería ser familiar si has estado usando git bash.

El archivo aún no parece ejecutable cuando lo mira desde el shell git bash, pero debería aparecer como 100755 en la interfaz web de GitHub.

Cuestiones relacionadas