¿Cómo hacer una copia de seguridad de un repositorio Git local?

Resuelto Dan Rosenstark asked hace 14 años • 8 respuestas

Estoy usando git en un proyecto relativamente pequeño y encuentro que comprimir el contenido del directorio .git podría ser una buena manera de hacer una copia de seguridad del proyecto. Pero esto es un poco extraño porque, cuando restauro, lo primero que tengo que hacer es git reset --hard.

¿Hay algún problema al realizar una copia de seguridad de un repositorio de git de esta manera? Además, ¿hay alguna forma mejor de hacerlo (por ejemplo, un formato git portátil o algo similar?).

Dan Rosenstark avatar Jan 25 '10 05:01 Dan Rosenstark
Aceptado

La otra forma oficial sería usar git bundle.

Eso creará un archivo que admita git fetchy git pullactualice su segundo repositorio.
Útil para copias de seguridad y restauración incrementales.

Pero si necesita hacer una copia de seguridad de todo (porque no tiene un segundo repositorio con contenido anterior ya implementado), la copia de seguridad es un poco más elaborada, como mencioné en mi otra respuesta, después del comentario de Kent Fredric :

$ git bundle create /tmp/foo master
$ git bundle create /tmp/foo-all --all
$ git bundle list-heads /tmp/foo
$ git bundle list-heads /tmp/foo-all

(Es una operación atómica , a diferencia de hacer un archivo desde la carpeta.git , como comenta fantabolous )


Advertencia: no recomendaría la solución de Pat Notz , que es clonar el repositorio. Hacer una copia de seguridad de muchos archivos siempre es más complicado que hacer una copia de seguridad o actualizar... solo uno.

Si observa el historial de ediciones de la respuesta de OP Yar , verá que Yar usó al principio a , ... con la edición:clone --mirror

Usar esto con Dropbox es un desastre total .
Tendrás errores de sincronización y NO PUEDES VOLVER UN DIRECTORIO A DROPBOX.
Úselo git bundlesi desea realizar una copia de seguridad en su Dropbox.

La solución actual de Yar utiliza un archivo git bundle.

Yo descanso mi caso.

VonC avatar Jan 24 '2010 23:01 VonC

La forma en que hago esto es crear un repositorio remoto (desnudo) (en una unidad separada, llave USB, servidor de respaldo o incluso github) y luego usarlo push --mirrorpara hacer que ese repositorio remoto se vea exactamente como mi repositorio local (excepto que el remoto es un repositorio simple) . repositorio).

Esto impulsará todas las referencias (ramas y etiquetas), incluidas las actualizaciones que no son de avance rápido. Lo uso para crear copias de seguridad de mi repositorio local.

La página de manual lo describe así:

En lugar de nombrar cada referencia para enviar, especifica que todas las referencias incluidas $GIT_DIR/refs/(que incluyen, entre otras refs/heads/, refs/remotes/, y refs/tags/) se reflejarán en el repositorio remoto. Las referencias locales recién creadas se enviarán al extremo remoto, las referencias actualizadas localmente se forzarán a actualizarse en el extremo remoto y las referencias eliminadas se eliminarán del extremo remoto. Este es el valor predeterminado si remote.<remote>.mirrorse establece la opción de configuración.

Hice un alias para hacer el push:

git config --add alias.bak "push --mirror github"

Luego, simplemente ejecuto git bakcada vez que quiero hacer una copia de seguridad.

Pat Notz avatar Jan 24 '2010 23:01 Pat Notz

[Dejo esto aquí para mi propia referencia.]

El script de mi paquete llamado git-backupse ve así

#!/usr/bin/env ruby
if __FILE__ == $0
        bundle_name = ARGV[0] if (ARGV[0])
        bundle_name = `pwd`.split('/').last.chomp if bundle_name.nil? 
        bundle_name += ".git.bundle"
        puts "Backing up to bundle #{bundle_name}"
        `git bundle create /data/Dropbox/backup/git-repos/#{bundle_name} --all`
end

A veces uso git backupy a veces uso git backup different-namelo que me da la mayoría de las posibilidades que necesito.

Dan Rosenstark avatar Feb 01 '2010 13:02 Dan Rosenstark