2010-03-31 12 views
8

En un DVCS, cada desarrollador tiene un repositorio completo en su estación de trabajo, al que pueden enviar todos sus cambios. Luego pueden fusionar su repositorio con el de otra persona, o clonarlo, o lo que sea (como yo lo entiendo, no soy un usuario de DVCS).¿Los sistemas de control de versiones distribuidas promueven malos hábitos de copia de seguridad?

Para mí, que marca un efecto secundario, de ser más vulnerable a olvidarse de hacer una copia de seguridad. En un sistema centralizado tradicional, tanto usted como desarrollador y las personas a cargo saben que si compromete algo, se mantiene en un servidor central que puede tener soluciones de respaldo adecuadas.

Pero el uso de un DVCS, parece que sólo tiene que empujar a su trabajo a un servidor cuando sientes que compartirlo. Está muy bien que tengas el repositorio localmente para que puedas trabajar en tu sucursal de funciones durante un mes sin molestar a nadie, pero significa (creo) que no es suficiente registrar tu código en el repositorio, debes recordar hacer regularmente empuja a un servidor respaldado.

También significa, ¿no es así, que un jefe de equipo puede no ver todos aquellos agradable SVN correos electrónicos de mantener una idea aproximada de lo que está pasando en el código base?

¿Alguno de esto es un problema real?

+0

¿Por qué necesitaría una solución de respaldo? Ya tiene una copia del código en las computadoras del desarrollador. –

+3

¿Y usted? Seguramente, el punto es que solo le envías tus cambios a alguien cuando está listo. Eso podría ser un trabajo de 2 semanas o más que solo existe en tu PC. –

Respuesta

2

que pueda Comprenda su preocupación acerca de los desarrolladores que olvidan las copias de seguridad una vez que su diferencia local se ha ido (porque se han comprometido localmente) y deja de molestarlos con una gran cantidad de copias de seguridad. ¡Creo que la solución puede estar en mejores herramientas, herramientas moar! Puede configurar un trabajo cron en cada casilla de desarrollo que empuje hasta el último objeto accesible en su repositorio al repositorio central, y los etiquete en el repositorio central (respaldado) con ramas espaciadas por nombre. Creo que "git push" puede hacer esto, dado el refspec correcto. Entonces, todo lo que no está haciendo está afectando el estado de sus ramas públicas.

¿Pero realmente necesita un proceso de copia de seguridad tan agresivo como antes, cuando el repositorio existía solo en un solo lugar? Con un DVCS, necesita una categoría de catástrofes mucho más alta para perder todo su código. Ahora necesita un asteroide o una bomba que llegue a su oficina (y a todos los miembros de su equipo fuera del sitio), en lugar de un disco duro o una controladora RAID que salgan mal. Tenga en cuenta que no defiendo el descuido; Estoy abogando por la igualdad de riesgos a un costo menor.

+1

Esto me parece incorrecto ...bajo la antigua versión centralizada, el árbol fuente completo existía en muchos lugares, ya que el modelo de uso prácticamente requiere que todos realicen actualizaciones/confirmaciones periódicas. Pero en el modelo distribuido, como dice John, podría haber semanas de trabajo disponibles solo en la PC de trabajo de los desarrolladores. – Clyde

+0

Sí, la pregunta no es acerca de tener una copia central respaldada por _A_. Específicamente, se trata de un trabajo comprometido localmente pero no implementado. Con SVN/CVS, si comete un error, lo almacena en otro lugar que no sea su PC local. –

+2

En los viejos sistemas de control de versiones centralizadas, tenía * solo * el árbol de código completo (y específicamente , NO su historia) en muchos lugares. Mi primer párrafo aborda específicamente el punto que parece implicar que ignoro. –

0

Tener una copia local del repositorio podría alentar los malos hábitos de copia de seguridad, en caso de que hubiera una holgura. Sin embargo, su repositorio principal DEBE tener una copia de seguridad.

La "copia local de todo el repositorio" tiene un uso mucho más importante que una copia de seguridad. Reduce la latencia de examinar el historial de la base de código, por ejemplo, difiriendo de la última versión, de ser un viaje redondo de red a un viaje a su disco duro local.

Eso no suena tan grande si su repositorio principal está en su LAN gigabit. Si eres un teletrabajador, y el repositorio está a 600+ ms de una VPN, hace una gran diferencia.

nunca he mirado en él, pero estoy seguro de que ambos Mercurial Git y apoyo post-commit ganchos, lo que le permite configurar los correos con que van a la líder del equipo. Entonces cada desarrollador podría configurar su repositorio en consecuencia, o tener un repositorio provisional que permita funciones a medio hacer con los correos de confirmación, o lo que sea.

Editar: En cuanto al comentario de John acerca de la pérdida de un experimento de larga duración porque no estaba listo para comprometerse con el repositorio principal: trabaje en una rama separada y periódicamente envíe sus cambios al maestro. Todavía obtienes todos los beneficios de trabajar contra un repositorio local (principalmente, para mí, muy baja latencia), y aún así no molestar a tus colegas con tu característica a medio hacer ... y aún puedes almacenar tus cambios en tu máquina, en un lugar donde su administrador puede respaldar correctamente el repositorio.

+0

Si tiene una conexión remota lenta, entonces es bueno para diffs, ¡pero detestaría descargar todo un repositorio de esa manera! –

+0

descargar un repositorio completo a través de una conexión lenta es molesto, pero solo necesita hacerlo una vez. Si está trabajando desde su casa, puede comenzar la gran atracción antes de la ducha y el desayuno (o acostarse la noche anterior, si es realmente grande). Después de eso, solo jalas y empujas pequeños diffs. – Wilka

+0

Esperando 30 segundos para que pueda ver los cambios que acaba de hacer (CVS, sé que SVN le permite hacer esto localmente) es demasiado irritante para soportar. Pero incluso en Subversion, si quieres saber algo más allá de los cambios que acabas de hacer (por ejemplo, al tratar de averiguar qué cometido introdujo un error), inmediatamente recibes un golpe de latencia. Encuentro que demoras tan cortas como 15 segundos son suficientes para que pierda interés en esperar, y termino olvidando mi lugar porque he ido a leer mi correo o SO. –

1

No creo que tengas un automatismo en esto. VCS distribuido o centralizado se puede combinar con copia de seguridad (o no). Todo es una cuestión de disciplina en el equipo.

Lo mismo para commit-emails. Si el equipo tiene la disciplina para impulsar cambios regularmente en los repositorios correctos, también puede tener una lista de correo comprometida.

Los malos hábitos también pueden crecer en un equipo con VCS centralizado. Siempre tienes que luchar contra los malos hábitos.

0

En la mayoría de los lugares en los que se imaginan que es probable que haya todavía un repositorio central desde donde se hacen construye y poner a prueba. Si quiere su código en la compilación, debe ser empujado centralmente.

Esto también es un problema de gestión, dígale a su equipo, empuje periódicamente (al menos diariamente) para que se haga una copia de seguridad de su código. Si no se está haciendo, saca el gran palo.

También me gustaría señalar, que si usted está confiando en mirar las confirmaciones para ver lo que sus empleados están haciendo, es probable que tenga algunos temas de mayor tamaño que lo podría hacer en frente ...

+1

"dile a tu equipo: presiona con regularidad" ... sí, pero mi punto es que esto introduce otra cosa que hacer. Un gran palo está bien y está bien, pero cuanto más haya que recordar, más posibilidades habrá de echar a perder. Al igual que el desarrollador que se va de vacaciones feliz, ha registrado el código pero se olvida de enviarlo a un repositorio central. –

+0

"probablemente tenga algunos problemas mayores" ... bueno, sí, pero especialmente en equipos remotos, es una forma de mantenerse más 'en contacto' como un líder técnico, que simplemente hablar con los desarrolladores sobre lo que han hecho. No es una cosa importante, pero un pequeño problema. –

+0

@John: creo que debes ser capaz de confiar en tu equipo de desarrollo una vez que recibas la capacitación adecuada. El chico que se va de vacaciones debería sentirse lo suficientemente avergonzado a su regreso para mitigar que esto vuelva a suceder. Creo que los beneficios superan los costos potenciales. – Paddy

Cuestiones relacionadas