web-dev-qa-db-fra.com

Sauvegarde complète d'un dépôt Git?

Existe-t-il un moyen simple de sauvegarder un référentiel git complet, y compris toutes les branches et les balises?

113
Daniel Upton

Qu'en est-il juste d'en faire un clone?

git clone --mirror other/repo.git

Chaque référentiel est une sauvegarde de sa télécommande.

55
KingCrunch
git bundle

J'aime cette méthode, car il en résulte que le fichier un, plus facile à copier.
Voir ProGit: petit paquet de joie .
Voir aussi " Comment puis-je envoyer à quelqu'un un référentiel git? ", où la commande

git bundle create /tmp/foo-all --all

est détaillé:

git bundle ne regroupera que les références affichées par git show-ref: cela inclut les têtes, les balises et les têtes distantes.
Il est très important que la base utilisée soit détenue par la destination.
Vous pouvez faire preuve de prudence, car le fichier de bundle contient des objets déjà dans la destination, ceux-ci étant ignorés lors de la décompression à la destination.


Pour utiliser cet ensemble, vous pouvez le cloner, en spécifiant un dossier inexistant (en dehors de tout dépôt Git):

git clone /tmp/foo-all newFolder
172
VonC

En développant d'autres réponses, voici ce que je fais:

Configurez le repo: git clone --mirror user@server:/url-to-repo.git

Ensuite, lorsque vous souhaitez actualiser la sauvegarde: git remote update à partir de l'emplacement du clone.

Toutes les branches et les balises sont sauvegardées, y compris les nouvelles ajoutées ultérieurement, bien que les branches supprimées ne soient pas supprimées du clone (ce qui peut être une bonne chose pour une sauvegarde).

Ceci est atomique donc n'a pas les problèmes qu'une simple copie aurait.

Voir http://www.garron.me/en/bits/backup-git-bare-repo.html

21
fantabolous

Développer les bonnes réponses par KingCrunch et VonC

J'ai combiné les deux:

git clone --mirror [email protected]/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all

Après cela, vous avez un fichier nommé reponame.bundle qui peut être facilement copié. Vous pouvez ensuite créer un nouveau référentiel git normal à partir de celui-ci en utilisant git clone reponame.bundle reponame.

Notez que git bundle seules les copies des validations conduisant à une référence (branche ou balise) dans le référentiel. Ainsi, les commits enchevêtrés ne sont pas stockés dans le paquet.

10
Kimmo Ahokas

Tout est contenu dans le .git répertoire. Sauvegardez-le avec votre projet comme n'importe quel fichier.

4
Oren Hizkiya

utilisez git bundle ou clone

copier le répertoire git n'est pas une bonne solution car il n'est pas atomique. Si vous avez un dépôt volumineux dont la copie prend beaucoup de temps et que quelqu'un l'insère dans votre référentiel, cela affectera votre sauvegarde. Le clonage ou la fabrication d'un bundle n'aura pas ce problème.

4
Sunil Khiatani

Vous pouvez sauvegarder le repo git avec git-copy à la taille de stockage minimale.

git copy /path/to/project /backup/project.repo.backup

Ensuite, vous pouvez restaurer votre projet avec git clone

git clone /backup/project.repo.backup project
3
Quanlong

La réponse correcte, OMI, est git clone --mirror . Cela sauvegardera entièrement votre dépôt.

Le miroir de clonage Git clone le référentiel entier, les notes, les têtes, les références, etc. Il est généralement utilisé pour copier un référentiel entier sur un nouveau serveur git. Cela fera tomber toutes les branches et le reste, le référentiel entier.

git clone --mirror [email protected]/your-repo.git
  • Normalement, le clonage d'un référentiel n'inclut pas toutes les branches, mais uniquement le maître.

  • La copie du dossier repo ne fera que "copier" les branches qui ont été extraites ... donc, par défaut, il s'agit d'une branche principale uniquement ou d'autres branches que vous avez extraites précédemment.

  • La commande bundle Git n’est pas non plus ce que vous voulez: "La commande bundle va mettre en forme tout ce qui serait normalement poussé sur le fil avec une commande git Push dans un fichier binaire que vous pouvez envoyer par courrier électronique à quelqu'un ou mettre sur un lecteur flash. dégrouper dans un autre référentiel ". (De Quelle est la différence entre le clone git --mirror et le clone git --bare )

2
John

S'il est sur Github, accédez à bitbucket et utilisez la méthode "import repository" pour importer votre référentiel github en tant que référentiel privé.

Si c'est dans bitbucket, faites l'inverse.

C'est une sauvegarde complète mais reste dans le cloud, ce qui est ma méthode idéale.

0
Mohammad
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git Push --set-upstream backup master

cela crée une sauvegarde et effectue la configuration, de sorte que vous puissiez faire un git Push pour mettre à jour votre sauvegarde, ce que vous voudrez probablement faire. Assurez-vous simplement que/path/to/backupdir et/path/to/repo sont au moins des disques durs différents, sinon cela n'a pas beaucoup de sens de le faire.

0
Arne

Voici deux options:

  1. Vous pouvez directement prendre un tar du répertoire git repo car il contient tout le contenu nu du référentiel sur le serveur. Il est possible que quelqu'un travaille sur le repo tout en prenant des sauvegardes.

  2. La commande suivante vous donnera le clone nu de repo (comme dans le serveur), vous pouvez alors prendre une goudron de l'emplacement où vous avez cloné sans aucun problème.

    git clone --bare {your backup local repo} {new location where you want to clone}
    
0