¿Cómo hacer una copia de seguridad de un repositorio Git local?
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?).
La otra forma oficial sería usar git bundle.
Eso creará un archivo que admita git fetch
y git pull
actualice 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.
Úselogit bundle
si desea realizar una copia de seguridad en su Dropbox.
La solución actual de Yar utiliza un archivo 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 usarlo push --mirror
para 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 otrasrefs/heads/
,refs/remotes/
, yrefs/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 siremote.<remote>.mirror
se 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 bak
cada vez que quiero hacer una copia de seguridad.
[Dejo esto aquí para mi propia referencia.]
El script de mi paquete llamado git-backup
se 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 backup
y a veces uso git backup different-name
lo que me da la mayoría de las posibilidades que necesito.