Cómo lidiar con múltiples files de usuario de Linux en Git

Tengo un proyecto de Git que es un poco especial porque los files en el tree son generados por dos usuarios diferentes. Ejemplo:

# ls -la drwxr-xr-x 13 ivan ivan 4096 2012-02-02 16:52 . drwxrwxrwx 32 root root 4096 2012-01-28 21:37 .. drwxr-xr-x 2 ivan ivan 4096 2012-02-07 20:41 system drwxr-xr-x 2 ivan ivan 4096 2012-02-07 20:41 compatibility drwxr-xr-x 33 ivan ivan 4096 2011-12-08 18:13 resources drwxr-xr-x 8 ivan ivan 4096 2012-02-07 20:41 .git -rw-r--r-- 1 ivan ivan 307 2012-02-02 16:52 .gitignore -rw-r--r-- 1 bulk bulk 700 2011-11-01 20:10 base.log ..... 

Git es controlado solo por un usuario (ivan) pero un daemon produce files asignados al usuario masivo . Todo estuvo bien mientras el daemon agregaba nuevos files, pero cuando el daemon cambió un file, git dejó de funcionar diciendo:

 error: unable to unlink old 'base.log' (Permission denied) 

Sé que la mejor opción es hacer que el daemon se ejecute como usuario ivan , pero eso es técnicamente difícil. La pregunta es: ¿hay alguna manera de lidiar con este tipo de situaciones en Git? Quiero decir, solo quiero hacer "git checkout branch" sin tener problemas con los permissions de usuario.

Agrega tu usuario git (ivan) al grupo 'bulk'.

Debian:

 sudo adduser ivan bulk # and relogin 

Otros (FC, Redhat y similares?):

 usermod -a -G bulk ivan 

Todo debería estar bien. Para tener acceso de escritura (es decir, para que pueda verificar, fusionar, etc., su tree de trabajo), cambie los permissions para permitir el acceso de escritura del grupo:

 sudo chmod g+rw bulk.log 

Alternativas:

  • almacenar files (usando cpio o tar, que son ambos capaces de preservar permissions)
  • posible combinación con bup
  • almacenar permissions como text o scripts, ver también Cómo preservar el permiso de file en git?

Esta no es realmente una pregunta de Git, sino por el hecho de darte una respuesta …

Está creando files en su repository y luego ejecuta una herramienta como usuario que no tiene permissions completos para ellos. Tienes que solucionar un problema o el otro: ejecuta Git como bulk , o crea files en los que ivan pueda leer y escribir. Tenga en count que eso no significa necesariamente que sea propiedad de ivan ; podrían tener 664 permissions, con un grupo apropiado.

La otra solución, por supuesto, sería no rastrear los files para los que no tienes permissions. Es sospechoso que esté rastreando files de logging; ese no es un caso de uso normal, ya que las cosas generadas en time de ejecución serán diferentes dependiendo de dónde se encuentre, por lo que no hay una idea sólida de lo que se debe registrar, pero confiaré en que realmente necesito hacerlo

Entonces, suponiendo que necesita hacer un seguimiento de esos files, no hay forma de que las cosas funcionen dada su configuration actual. No puede escribir en files en los que no tiene permiso para escribir.