¿Cómo hago una copia de seguridad de un repositorio de git?

26

Estoy planeando cambiar de SVN a git. Con svn, solo copie mi carpeta de repositorio cuando quiero hacer una copia de seguridad. Sin embargo, git no tiene uno, ¿qué hago?

¿Debo crear un clon en una unidad separada y actualizarlo desde mi proyecto? ¿Entonces puedo grabar / archivar esta carpeta y tendrá todo el historial?

Esto es probablemente obvio, pero quiero asegurarme cuando se trata de copias de seguridad. Todavía pretendo que haya un repositorio raíz.

Sathyajith Bhat
fuente
Ver también: Copia de seguridad de un repositorio de GitHub (las respuestas también funcionan para proyectos git que no son de GitHub)
Martin Thoma

Respuestas:

14

Solo cópialo. Git hace uso de una carpeta de recompra, sino que queda oculta de vistas normales de directorio. (La carpeta se nombra .giten los sistemas * nix, por lo que solo aparece si la usa ls -a. Supongo que establece el atributo "oculto" en Windows, pero nunca he usado git en un entorno de Windows, así que no estoy seguro acerca de cómo se maneja allí).

Dave Sherohman
fuente
Hay un par de archivos de proyecto en mi troncal que ignoro. ¿Entonces literalmente puedo copiarlo? (Asumiré que funciona de la misma manera que Linux). Entonces, ¿es clonar solo una copia de archivo? Supongo que si extraigo todos los datos que quiero están en la carpeta. Verifiqué que hay archivos .git pero hay archivos .svn en mi tronco svn y no pensé en verificar si los datos del historial estaban allí
2
En Windows, sigue siendo .git, con el atributo "Oculto".
Grawity
1
@ acidzombie24: el .gitdirectorio contiene todo el estado del repositorio, incluido el historial. (Esa es la parte "distribuida")
Grawity
55
@grawity: es más la parte "autocontenida", la parte distribuida es cuando intercambias diferencias entre los repositorios autocontenidos :)
akira
19

La respuesta akira es correcta, pero puede agregar --mirror para crear un repositorio simple (para una copia de seguridad un poco más pequeña).

Utilizamos la siguiente estrategia (casi exactamente):

git clone --mirror yourrepo backup.repo
tar cjf backup.repo.tar.bz2 backup.repo
scp backup.tar.bz2 ssh://somewhereelse

Luego, para recuperarse de su copia de seguridad:

tar xjf backup.repo.tar.bz2
git clone backup.repo yourrepo
akirisol
fuente
2
Esto es útil, gracias. ¿Cómo uso el repositorio respaldado para restaurar el árbol de trabajo?
Jonathan Day
10

Estoy usando git bundle . Para hacer un archivo de copia (un archivo de copia de seguridad) ejecute:

git bundle create backup.bundle master

Para restaurar el repositorio con branch master simplemente clone el archivo backup.bundle:

git clone backup.bundle -b master my-project
MariuszS
fuente
2

crear un nuevo clon en otro lugar:

 % git clone yourepo somewhereelse

por cierto, git tiene una carpeta de repositorio, puede ubicarla en su copia de trabajo debajo del subdirectorio .git. cada copia de trabajo tiene esa "carpeta de repositorio".

akira
fuente
10
No creo que un clon sea aceptable como copia de seguridad, ya que no es una copia exacta. Al menos las ramas remotas del repositorio clonado faltarán en el clon, y las ramas del repositorio clonado aparecerán como ramas remotas en el clon.
sleske