Git pull en un entorno Linux cambia el propietario de los archivos

12

¿Por qué cada vez que ejecuto un git pullen mi servidor en vivo, se cambia el propietario de los archivos? Sigo haciendo manualmente a chown john:john index.php.

¿Qué necesito cambiar para que, cuando haga un git pull, el propietario de los archivos sea automáticamente o se quede john?

PinoyStackOverflower
fuente
1
¿Es johnel propietario del directorio actual?
user000001
Sí, John es el propietario del directorio :)
PinoyStackOverflower
1
¿Qué usuario está ejecutando git pull?
Cuonglm
@Gnouc usuario root, he iniciado sesión en nuestro servidor en vivo a través de SSH como usuario root :)
PinoyStackOverflower

Respuestas:

11

Cuando usa git pull(que es equivalente a git fetch; git merge), git actualizará los archivos sin cambiar de propietario (git no almacena esa información). Pero si hay nuevos archivos para crear, el usuario actual se establecerá como el propietario.

Hay una solución diferente para resolver esto. Lo más fácil es probablemente agregar un post-updategancho (en su .git/hooksdirectorio) para llamar automáticamente chown john:john . -Rdespués de fusionar / extraer ( vea esa solución SO para ver un ejemplo ).

Las soluciones alternativas son:

  • Ejecútelo git pullcomo el usuario john en lugar de root (eso requerirá permisos de escritura en john para el directorio .git).
  • Cree un enlace para realizar la implementación, que utilizará a john como usuario, o haga la tarea después de la actualización (por lo que tendrá que hacerlo git pulldentro del post-receiveenlace del repositorio desnudo).
Asenar
fuente
¿Qué pasa si haces git fetchcomo root y luego git mergecomo usuario john? ¿John todavía necesitará permisos de escritura para el .gitdirectorio?
Comodín el
Si, la mayoría de las veces. git fetchcomo root, los archivos nuevos en .git / objects` pueden tener root como propietario. git mergecomo el usuario john (la mayoría de las veces) intentará sobrescribir al menos .git/indexy .git/HEAD(lo que podría ser eliminado / creado en cada cambio, supongo), y escribir algunos archivos .git/objects/. + cualquier archivo nuevo en su directorio de trabajo. Tal vez hay excepciones con la combinación de avance rápido, por ejemplo.
Asenar