¿Cómo administrar copys de security y monitorear Git con un repository central?

Estoy en un equipo que usa Git en este momento, y tenemos un flujo de trabajo bastante bueno. Tenemos un repository central con dos twigs, dev y master. Creamos sucursales locales para trabajar en tareas individuales. Nos fusionamos en desarrollo cuando están listos. Luego nos fusionamos para dominar cuando las cosas están lists, y labelmos todos nuestros lanzamientos. Si varios desarrolladores necesitan cooperar en una tarea más directamente, podemos crear otra twig remota, posiblemente temporal, para que puedan compartir los parches. Esto está funcionando bastante bien para nosotros, pero nos deja con dos problemas.

Un problema es el problema de las copys de security. Claro, la mayoría de la base de código está respaldada. Cada máquina que tiene un clon del repository tiene la mayor parte del código. Sin embargo, el código que alguien escribe durante el transcurso de un día no se respalda hasta que se fusionan con dev y push. Si la tarea en la que están trabajando no es trivial, podrían pasar días antes de que se fusionen y funcionen. ¿Cómo nos aseguramos de que este código de trabajo en progreso esté respaldado en un lugar central seguro? Solo use alguna solución de respaldo externa a Git?

El segundo problema es el problema de monitorear el progreso de los empleados. Los gerentes quieren poder ver qué código escribieron los desarrolladores cada día. Si se va a comprar un día en el que no empujó nada, parecerá que no hizo nada todo el día. Necesitamos alguna forma de mostrar nuestro trabajo a diario que no nos obligue a comprometernos y aplicar un código que no esté listo para comprometerse, fusionarse y presionar.

Una solución que consideramos es crear una sucursal remota en el repository central para cada sucursal local que hacemos. Esto probablemente funcionaría, pero sería un gran desorder, incluso si elimináramos regularmente las viejas twigs no utilizadas. También es mucho trabajo extra para administrar todo eso.

¿Cómo podemos satisfacer estos requisitos comerciales sin interrumpir nuestro flujo de trabajo de Git?

Podrías considerar hacer algo como esto. Use un espacio de nombres no ramificado para copys de security de desarrolladores privados. Por ejemplo, refs/backups/xxx/* donde xxx es el id. De usuario o las iniciales del desarrollador o similar.

Un desarrollador puede hacer git push origin +refs/heads/*:refs/backups/xxx/* para realizar una copy de security de todas sus sucursales locales.

De forma pnetworkingeterminada, los desarrolladores no se ven las copys de security privadas entre sí, pero se pueden recuperar si es necesario.

La fórmula de inserción de respaldo puede convertirse en un command de git backup través de un alias.

Aunque creo que no es una buena idea, las sucursales privadas de un desarrollador se pueden usar para ver su "progreso", se parece mucho a la microgestión.

Editar: Al escribirlo, me sentí bastante familiar y luego recordé por qué. Escribí sobre algo similar en respuesta a otra pregunta hace un time: enlace .

  • Respaldo de repositorys individuales

  • Cree un repository de "copy de security", al que otro trabajo finalizó en refs/remotes/<username>/ namespace:

     [remote "backup"] url = user@backup.example.com/srv/git/backup.git push = +refs/heads/*:refs/remotes/user/* 
  • Utilice Gerrit : consulte el artículo "Gerrit: revisión del código estilo Google encuentra a git" en LWN.net