Saltar al contenido

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

Solución:

La otra forma oficial sería usar paquete de git

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

Pero si necesita hacer una copia de seguridad todo (porque no tiene un segundo repositorio con contenido anterior ya implementado), la copia de seguridad es un poco más elaborada, como se menciona 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 un operación atómica, a diferencia de hacer un archivo a partir del .git carpeta, comentada por 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 un clone --mirror, … con la edición:

Usar esto con Dropbox es un desastre total.
Tendrá errores de sincronización y NO PUEDE ROLLAR UN DIRECTORIO ATRÁS EN DROPBOX.
Usar git bundle si desea hacer una copia de seguridad en su Dropbox.

La solución actual de Yar utiliza git bundle.

Yo descanso mi caso.

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 usar push --mirror para que ese repositorio remoto se vea exactamente como el local (excepto que el remoto es un desnudo repositorio).

Esto impulsará todas las referencias (ramas y etiquetas), incluidas las actualizaciones que no sean 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 empujar, especifica que todas las referencias bajo $GIT_DIR/refs/ (que incluye pero no se limita a refs/heads/, refs/remotes/, y refs/tags/) se refleje en el repositorio remoto. Las referencias locales recién creadas se enviarán al extremo remoto, las referencias actualizadas localmente se actualizarán a la fuerza en el extremo remoto y las referencias eliminadas se eliminarán del extremo remoto. Este es el valor predeterminado si la opción de configuración remote.<remote>.mirror Está establecido.

Hice un alias para hacer el empuje:

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

Entonces, simplemente corro git bak siempre que quiera hacer una copia de seguridad.

[Just leaving this here for my own reference.]

Mi secuencia de comandos de paquete se llama git-backup Se ve como esto

#!/usr/bin/env ruby
if __FILE__ == $0
        bundle_name = ARGV[0] if (ARGV[0])
        bundle_name = `pwd`.split("https://foroayuda.es/").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 backup y a veces uso git backup different-name lo que me da la mayoría de las posibilidades que necesito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *