2010-03-24 17 views
10

Soy un gran fanático de las copias de seguridad. Guardo mis ensayos importantes de la escuela y tal en una carpeta de mi Dropbox. Me aseguro de que todas mis fotos estén duplicadas en una unidad externa. Tengo un servidor doméstico donde guardo los archivos importantes reflejados en dos unidades dentro del servidor (como un software RAID 1).Copia de seguridad del repositorio local Mercurial

Por lo tanto, para mi código, siempre he usado Subversion para respaldarlo. Guardo la carpeta troncal con una copia estable de mi aplicación, pero luego creo una rama nombrada con mi nombre de usuario, y adentro está mi copia de trabajo. Realizo muy pocos cambios entre confirmaciones para esa rama, con la comprensión de que el código allí es mi copia de seguridad.

Ahora estoy investigando a Mercurial, y debo admitir que aún no lo he usado realmente así que es posible que todo esto esté mal. Pero me parece que tiene un repositorio del lado del servidor, y luego lo clona en un directorio de trabajo en la forma de un repositorio local. Luego, mientras trabajas en algo, haces commits en ese repositorio local, y cuando las cosas están en un estado para ser compartidas con otros, hg push en el repositorio padre en el servidor.

Entre empujes de código estable, probado y libre de errores, ¿dónde está la copia de seguridad?

Después de pensar un poco, he llegado a la conclusión de que no es para fines de copia de seguridad y supone que ha manejado eso por su cuenta. Creo que necesito mantener mis repositorios locales de Mercurial en mi Dropbox u otra ubicación respaldada, ya que mi código en progreso no se envía al servidor.

¿Es esto más o menos, o me he perdido algo? Si usa Mercurial, ¿cómo hace una copia de seguridad de sus repositorios locales? Si esta mañana has encendido tu computadora y tu disco duro se incendió (o, más probablemente, la cabeza de lectura se estropeó, o el sistema operativo se corrompió a sí mismo, ...), ¿qué se perderá? Si pasaste la última semana desarrollando un módulo, escribiendo casos de prueba para él, documentándolo y comentándolo, y luego un virus borra tu depósito local, ¿no es esa la única copia?

Entonces, por otro lado, ¿creas un repositorio remoto para cada repositorio local y lo presionas todo el tiempo?

¿Cómo se puede encontrar un equilibrio? ¿Cómo se asegura que su código esté respaldado? ¿Dónde está la línea entre utilizar Mercurial como copia de seguridad y utilizar una utilidad de copia de seguridad del sistema de archivos local para mantener seguros los repositorios locales?

Respuesta

11

Está bien pensar en Subversion como una 'copia de seguridad', pero solo está haciendo eso en virtud de estar en una máquina separada, que no es realmente intrínseca a Subversion.Si su servidor de Subversion era la misma máquina que su máquina de desarrollo, algo poco común en el mundo de Linux, no está realmente respaldado en el sentido de tener protección contra fallas de hardware, robos, incendios, etc. Y, de hecho, hay algunos datos en ese caso que no están respaldados en absoluto; su código actual puede existir en dos lugares, pero todo lo demás en el repositorio (por ejemplo, el historial de revisión) solo existe en un lugar, en el servidor remoto.

Es exactamente lo mismo para Mercurial, excepto que ha eliminado la necesidad de un servidor por separado y lo ha hecho para que tenga que pensar explícitamente en la copia de seguridad en lugar de ser un efecto secundario de la necesidad de tener un servidor en alguna parte Definitivamente puede configurar otro repositorio de Mercurial en alguna parte y enviar sus cambios periódicamente y considerar su copia de seguridad. Alternativamente, simplemente haga una copia de seguridad de su repositorio local de la misma manera que haría una copia de seguridad de cualquier otro directorio importante. Teniendo una copia completa del repositorio localmente, que incluye todo el historial de revisión y otros metadatos, podría decirse que es aún más conveniente y seguro que la forma en que lo hace actualmente con Subversion.

+0

mercurial también mantiene el historial de revisiones (de las ramas rastreadas) en cada repositorio – kriss

2

Los cambios llegan al directorio remoto solo cuando presiona. Los compromisos se mantienen locales, pero los obtiene si clona su repositorio. Entonces, sí, si quieres que tus cosas lleguen al repositorio del servidor, tienes que presionar "todo el tiempo".

Por otro lado, nada le impide tener varias máquinas y enviar contenido de una a otra. Cada repositorio de mercurial puede convertirse en un servidor en cuestión de segundos escribiendo "hg serve".

No estoy seguro de que realmente responda a su pregunta, pero también soy un gran admirador de la copia de seguridad y administro las cosas de esta manera con muchos clones de mi repositorio (también uso masivamente mq para trabajar en modo parche pero eso es otro historia).

PD: como nota al margen, estoy considerando utilizar mercurial como una herramienta para la copia de seguridad del sistema de archivos. Lo único que me molesta es que, para este propósito, preferiría desactivar la función de diferencia y tratar todos los archivos como binarios, pero eso debería ser fácil.

9

El directorio "oculto" .hg almacena todas las confirmaciones locales. Puede hacer una copia de seguridad de este directorio usando un programa de respaldo estándar.

+2

Entonces, suponiendo que se hayan confirmado los cambios, ¿lo único que necesito hacer para realizar la copia de seguridad es la carpeta .hg? Puede alguien confirmar esto? –

Cuestiones relacionadas