2011-06-09 13 views
6

En un servidor en el que trabajo, debemos iniciar sesión como root (por razones que no entraré aquí). Tenemos una configuración de repositorio git que se usa para el servidor web, pero como los archivos se crean como raíz, los archivos modificados por git tienen los permisos incorrectos.Permisos de reparación con git post-merge

Creé un gancho increíblemente simple después de la fusión que pensé que resolvería el problema.

#!/bin/bash 
. git-sh-setup 
chown -R www-data:www-data $GIT_DIR 

me cayó esto en .git/hooks/post-merge con permisos de ejecución, pero el archivo no parece correrse. Esta es la primera vez que intento crear un gancho, así que tal vez me falta algo obvio.

Una cosa que sí noté es que la mayoría de los enganches tenían un archivo .sample, mientras que los post-merge no. (git versión 1.7.4)

Gracias de antemano!

+0

¿Usted intentó añadir un 'echo' o escribir un archivo' tmp' con el fin de asegurarse de que no se ha ejecutado? ¿Por qué un 'post-merge' (en git pull) y no un' post-receive' (en 'git push')? Si no haces un 'git pull' directamente en el servidor, ese gancho en particular (' post-merge') no se ejecutará. Que el '. Se supone que la línea git-sh-setup' debe hacer? – VonC

+0

Intenté escribir un archivo temporal. No parece que se ejecute. Y lo hago directamente en el servidor. Entiendo que git-sh-setup prepara las variables de entorno necesarias. –

+0

¿Puedes publicar los comandos reales que usas cuando realizas un pull (y esperas que se ejecute el script)? –

Respuesta

2

Es posible que ya lo haya sabido, pero es posible que desee comprobar los caracteres EOL (CR) en el enlace posterior a la fusión. Esto podría explicar por qué su gancho no se ejecuta (como se menciona en esta otra pregunta git-hook-post-merge-error-cannot-run.

Si esta no es la solución, también podría considerar otro enfoque para su problema. Podría hacer una tarea para realizar el el propietario cambia a su directorio cuando un archivo en su repositorio cambia en el servidor. Las tareas cron por sí mismas no reaccionan en base a los cambios del sistema de archivos, pero podría intentar usar algo como inotify para reaccionar a los cambios en el repositorio git del servidor en cualquier cambio.

espero que estas dos piezas de información, ya sea resuelven el problema o al menos lo pone más cerca. Buena suerte.

+0

Es cierto que inotify funcionaría.No parece que haya un mejor enfoque. –

0

Asegúrese de agregar la secuencia de comandos a la propiedad del grupo de superusuario.

+0

El script se creó como root. –

0

Quizás esté buscando la post-receive hook, si desea que la secuencia de comandos para actuar en el repositorio remoto se presiona.

+0

No, me gustaría usar el gancho post-fusión. –

0

Echa un vistazo a la forma en que funcionan los "logros de git". Sería más fácil ajustar git en un script y hacer lo que necesita en cualquier comando. Los ganchos están diseñados más para el repositorio remoto en lugar de local. Merge es algo que haces localmente por lo que no encontrarás mucha ayuda de los mecanismos de gancho.

Enlace:

http://benjamin-meyer.blogspot.com/2010/03/git-achievements.html

Esperanza esto ayuda

+0

Funcionaría, pero parece un poco desordenado. –

+0

¿Por qué es desordenado? Git está hecho para ser guionado. De hecho, la mayoría de los comandos de git que usas son en realidad scripts bash. No trates de colocar una clavija redonda en un agujero cuadrado tratando de arreglar esto con ganchos. La fusión es algo que enfoca su trabajo en el árbol de trabajo. Script es tu savoir –

+1

Bueno, si los ganchos funcionaran como esperaba, mi solución sería un script de shell de dos, quizás tres líneas. Escribir un contenedor para git, aunque quizás sea bastante sencillo, es al menos un orden de magnitud más complicado. –

Cuestiones relacionadas