problema de permiso de git hook

He configurado mi estructura de trabajo git de la siguiente manera (gracias a una recomendación en otra pregunta git: trabajo de proyecto pequeño )

/live/website | | /path/to/staging (bare) | | | | dev1 dev2 

Actualmente, tanto dev1 como dev2, llevan los proyectos al /path/to/staging repo . Tengo un gancho en / path / to / stage, que automáticamente desencadena un git pull desde mi / live / web. De esta manera, tengo una copy de trabajo de files allí.

También /path/to/staging (bare) se inicializó con share = 0777, así que sé con certeza que la cuota no es un problema. Además, he CHMODded todos los files a 777 y también establecí el bit de stick.

Creé el repo / live / web como user : root . Sin embargo, he creado el repository en dev1 como user : dev1 . Puedo hacer cambios en dev1 bien, sin embargo cuando trato de empujar el repository desde dev1, aquí está el problema que enfrento:

 error: Couldn't set refs/remotes/origin/master From /path/to/staging ! 8b4fddc2 .. e2a0b21 master -> origin/master (unable to update local ref) To path/to/staging 8c5fddc2 .. e2a0b21 master -> master 

Y, básicamente, no veo que los files se transfieran con éxito a / live / website. Creo que surge este problema ya que estoy ejecutando el código como user : dev1 . Sin embargo, cuando navego a /live/websit e y hago un git pull manualmente como user : root , logra extraer los cambios realizados por dev1 y cambia el file de trabajo.

¿Alguien puede recomendar si hay una forma de evitar este problema? Ya que es mejor que el gancho automático …

Algo más que pensé que estaba haciendo, estaba pensando en cambiar al usuario:

 su root password 

Sin embargo, cuando se ejecuta, no creo que ingrese la contraseña en el post, ya que el post de error que recibo es:

 hooks/post-receive: line 18: password: command not found 

EDITAR,

Además, ¿alguien puede sugerir una forma de regresar de un empujón? ¿Y get el estado previo de los files?

AFAIK no puede dar su contraseña en la línea de command. Pero puede usar sudo, agregar el usuario permitido en / etc / sudoers sin contraseña , para que pueda ejecutar su command como sudo -u webside-user-name 'cd /live/website && git fetch && git checkout master' .

Estoy usando un flujo de trabajo similar y ni siquiera tengo acceso de root en el server web en vivo y todavía funciona bien. Aquí está el script que estoy usando (es un gancho post-recepción, supongo que podría ser un gancho post-actualización en su lugar, pero no lo he probado):

 #! / bin / sh
 # Para habilitar este enganche, haga que este file sea ejecutable mediante "chmod + x post-receive".
 GIT_WORK_TREE = / ruta / a / htdocs git checkout -f

Luego puede probar el enganche ejecutando hooks / post-receive. Si funciona cuando lo testing manualmente, debería funcionar cuando ejecute "git push"