2012-10-04 53 views
12

Cuando retiro el cambio de mis repositorios, Git cambia los permisos del archivo (en realidad, cambia el permiso del grupo write).Evitar que Git cambie los permisos en pull

Si estoy en lo correcto, Git solo debe rastrear el bit ejecutable y esto de todos modos se puede eliminar utilizando la configuración core.filemode en falso.

Pero, aunque el modo de archivo se establece en falso (en local, global y usuario), cuando lo hago, el permiso write cambia constantemente.

Podría usar un git-hooks para reiniciar el chmod correcto, pero esto es un poco sobrecargado y preferiría si hay una manera de pedirle a git que ignore por completo el cambio de modo de archivo.

¿Alguien sabe cómo lograr esto?

Respuesta

8

Una configuración que fuerza ayuda aquí config es core.sharedRepository, presentado en el blog "Preserving Group Write on Git Objects in a Collaborative Repository":

La solución resultó ser bastante sencillo.
En el archivo .git/config, he añadido una línea que decía: "sharedRepository = group", así:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    sharedRepository = group 

A partir de entonces, los nuevos archivos en .git/objects fueron creados con los permisos adecuados para el grupo de escritura.
(Sin embargo, tenga en cuenta que los archivos nuevos pertenecen al grupo primario de la cuenta de usuario a través del cual se recibió el push. Si los usuarios que colaboran en el proyecto tienen diferentes grupos primarios, y si esos usuarios no comparten membresía en ese conjunto de grupos, que todavía puede tener problemas)

Asegúrese de que el valor de su umask:.

Ejemplo: 0660 hará que la lectura repo/escritura capaz para el propietario y grupo, pero inaccesible para otros (equivalente a grupo a menos que umask es, p. 0022).

+1

Consulte también https://groups.google.com/forum/?fromgroups=#!topic/repo-discuss/QrJII6gTLGM en 'umask' (o http://serverfault.com/questions/26954/how- do-i-share-a-git-repository-with-multiple-users-on-a-machine) – VonC

+2

¡Hola, gracias! Mi problema no era sobre .git/objects, sino archivos en el repositorio, pero tu comentario sobre el 'umask' era correcto. El ajuste de 'umask' a' 002' permite el acceso de escritura grupal de forma predeterminada. –

3

La solución que utilizo es run the command as the user que tiene los permisos que desea mantener:

sudo -u user command 

En este caso, podría ser:

sudo -u www-data git pull 

www-databeing the apache default user on Ubuntu at least.

Esto evita que los permisos cambien. Lo uso cuando actualizo los repositorios de git en mi VPS, mientras mantengo los permisos de archivo establecidos para el usuario del servidor web.

+2

Interesante.Tendré que probar eso. +1 – VonC