2009-11-19 9 views
5

Estoy en un equipo que usa Git ahora mismo, y tenemos un flujo de trabajo bastante bueno. Tenemos un repositorio central con dos ramas, 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 listas, y etiquetamos todos nuestros lanzamientos. Si varios desarrolladores necesitan cooperar en una tarea más directamente, podemos crear otra rama remota, posiblemente temporal, para que puedan compartir los parches. Esto está funcionando bastante bien para nosotros, pero nos deja con dos problemas.¿Cómo administrar copias de seguridad y monitorear Git con un repositorio central?

Un problema es el problema de las copias de seguridad. Claro, la mayoría de la base de código está respaldada. Cada máquina que tiene un clon del repositorio 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 la cuestión del control del progreso del empleado. 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 empujaste nada, parecerá que no hiciste nada en 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 rama remota en el repositorio central para cada rama local que hacemos. Esto probablemente funcionaría, pero sería un gran desorden, incluso si elimináramos regularmente las viejas ramas 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?

+0

En general me parece el: rama mientras se trabaja en ella empuje para copia de seguridad al final del día eliminar una vez que haya ninguna necesidad de ello más y se ha incorporado al proceso principal rama funciona bien – Kzqai

+0

Bah, mal formateado, pero se entiende, utilizar todo ese poder de ramificación en una forma de denominación-esquema-es-organizada es simple y útil. – Kzqai

Respuesta

3

Podría considerar hacer algo como esto. Use un espacio de nombres no ramificado para copias de seguridad de desarrolladores privados. P.ej. 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 hacer una copia de seguridad de todas sus sucursales locales.

De forma predeterminada, los desarrolladores no se ven las copias de seguridad privadas, pero se pueden recuperar si es necesario.

La fórmula de inserción de respaldo puede convertirse en un comando git backup mediante un alias.

Como 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 entonces recordé por qué. Escribí sobre algo similar en respuesta a otra pregunta hace un tiempo: link.

+0

Esa es una buena solución para copias de seguridad. Sin embargo, ¿cómo puede alguien más verificar mis copias de seguridad? – Apreche

+0

Sí, para nosotros esto es una 'característica' no es un problema. Si desea copias de seguridad verdaderamente privadas, entonces realmente necesita un repositorio de copias de seguridad por usuario independiente. –

2
  • repositorios de copia de seguridad individuales

  • Crear un repositorio de "copia de seguridad", a la que de otro empuje terminado el trabajo en refs/remotes/<username>/ espacio de nombres:

    [remote "backup"] 
        url = [email protected]/srv/git/backup.git 
        push = +refs/heads/*:refs/remotes/user/* 
    
  • Uso Gerrit: "Gerrit: Google-style code review meets git" ver el artículo en LWN.neta

Cuestiones relacionadas