Comment sauvegarder un dépôt git?

26

Je prévois de passer de SVN à git. Avec svn, je copie simplement mon dossier de dépôt lorsque je veux le sauvegarder. Cependant git n'en a pas alors que dois-je faire?

Dois-je créer un clone sur un lecteur séparé et mettre à jour en tirant de mon projet? Ensuite, je peux graver / archiver ce dossier et il aura toute l'histoire?

C'est probablement évident mais je veux m'assurer quand il s'agit de sauvegardes. Je fais toujours semblant qu'il existe un référentiel racine.

Sathyajith Bhat
la source
Voir aussi: Sauvegarder un référentiel GitHub (les réponses fonctionnent aussi pour les projets git non GitHub)
Martin Thoma

Réponses:

14

Vous venez de le copier. git n'utiliser un dossier de prise en pension, il est juste caché des vues normales du répertoire. (Le dossier est nommé sur les systèmes * nix, il n'apparaît donc que si vous utilisez . Je suppose qu'il définit l'attribut "caché" dans Windows, mais je n'ai jamais utilisé git dans un environnement Windows, donc je ne suis pas certain de comment cela est géré là-bas.).gitls -a

Dave Sherohman
la source
Il y a quelques fichiers de projet dans ma malle que j'ignore. Donc je peux littéralement le copier? (Je suppose que cela fonctionne de la même manière que Linux). Le clone n'est-il donc qu'une copie de fichier? je suppose que si je tire toutes les données que je veux se trouve dans le dossier. J'ai vérifié qu'il y a des fichiers .git mais il y a des fichiers .svn dans mon tronc svn et je n'ai pas pensé à vérifier si les données d'historique étaient là
2
Sous Windows, c'est toujours .git, avec l'attribut "Caché".
grawity
1
@ acidzombie24: le .gitrépertoire contient l' intégralité de l' état du référentiel, y compris l'historique. (C'est la partie "distribuée".)
grawity
5
@grawity: c'est plus la partie "autonome", la partie distribuée est lorsque vous échangez des différences entre les référentiels autonomes :)
akira
19

La réponse akira est correcte, mais vous pouvez ajouter --mirror pour créer un dépôt nu (pour une sauvegarde légèrement plus petite).

Nous utilisons la stratégie suivante (presque exactement):

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

Ensuite, pour récupérer à partir de votre sauvegarde:

tar xjf backup.repo.tar.bz2
git clone backup.repo yourrepo
akirisol
la source
2
C'est utile, merci. Comment utiliser le référentiel sauvegardé pour restaurer l'arborescence de travail?
Jonathan Day
10

J'utilise git bundle . Pour créer un fichier de copie (un fichier de sauvegarde), exécutez:

git bundle create backup.bundle master

Pour restaurer le référentiel avec le maître de branche, clonez simplement le fichier backup.bundle:

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

créer un nouveau clone ailleurs:

 % git clone yourepo somewhereelse

btw, git a un dossier repo, vous pouvez le localiser dans votre copie de travail sous le sous-répertoire .git. chaque copie de travail a ce "dossier repo".

akira
la source
10
Je ne pense pas qu'un clone soit acceptable comme sauvegarde, car ce n'est pas une copie exacte. Au moins les branches distantes du référentiel cloné seront manquantes dans le clone, et les branches du référentiel cloné apparaîtront comme des branches distantes dans le clone.
sleske