Une sauvegarde complète d'un git repo?
y a-t-il un moyen simple de sauvegarder un repo git complet incluant toutes les branches et étiquettes?
10 réponses
pourquoi en faire un clone?
git clone --mirror other/repo.git
chaque dépôt est une sauvegarde de sa télécommande.
git bundle
j'aime cette méthode, car il résulte en seulement un Fichier, plus facile à copier autour.
Voir Prog.: Petit Paquet de joie .
Voir aussi" Comment puis-je envoyer un dépôt git à quelqu'un? ", où la commande
git bundle create /tmp/foo-all --all
est détaillé:
git bundle
ne paquet de références qui sont indiqué par git show-ref : comprend les têtes, les étiquettes et les têtes distantes.
Il est très important que la base utilisée sera tenue par la destination.
Il est normal d'errer du côté de la prudence, en faisant en sorte que le fichier package contienne des objets déjà dans la destination, car ceux-ci sont ignorés lors du déballage à la destination.
pour l'utilisation ce paquet, vous pouvez le cloner, en spécifiant un dossier inexistant (en dehors de tout git repo):
git clone /tmp/foo-all newFolder
en développant sur d'autres réponses, c'est ce que je fais:
le programme d'Installation le repo: git clone --mirror user@server:/url-to-repo.git
puis quand vous voulez rafraîchir la sauvegarde: git remote update
à partir de l'emplacement du clone.
cela sauvegarde toutes les branches et étiquettes, y compris les nouvelles qui sont ajoutées plus tard, bien qu'il soit intéressant de noter que les branches qui sont supprimées ne sont pas supprimées du clone (ce qui pour une sauvegarde peut être une bonne chose).
C'est atomique, donc qui n'ont pas de problèmes qu'une simple copie.
tout est contenu dans le répertoire .git
. Il suffit de sauvegarder cela avec votre projet comme vous le feriez n'importe quel dossier.
l'utilisation de 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 grand dépôt qui prend beaucoup de temps à copier et que quelqu'un pousse vers votre dépôt, cela affectera votre sauvegarde. Le clonage ou la fabrication d'un faisceau n'aura pas ce problème.
la bonne réponse IMO est git clone -- mirror . Cela vous permettra de sauvegarder entièrement votre pension.
Git clone miroir permet de cloner l'intégralité du référentiel, les notes, les chefs, les références, etc. et est généralement utilisé pour copier l'intégralité d'un référentiel vers un nouveau serveur git. cela va tirer vers le bas Un toutes les branches et tout, le tout dépôt.
git clone --mirror git@example.com/your-repo.git
-
normalement, le clonage d'un repo n'inclut pas toutes les branches, seulement le Master.
-
copier le dossier repo ne "Copier" les branches qui ont été tiré dans...donc par défaut qui est branche principale seulement ou autre branches que vous avez vérifié auparavant.
-
la commande git bundle n'est pas non plus ce que vous voulez: "la commande bundle va emballer tout ce qui serait normalement poussé sur la wire avec une commande git push dans un fichier binaire que vous pouvez envoyer par e-mail à quelqu'un ou mis sur une clé USB, puis dégrafé dans un autre dépôt."(De Quelle est la différence entre git clone --miroir et git clone --bare )
voici deux options:
-
vous pouvez prendre directement un tar du répertoire repo de git car il contient tout le contenu nu du serveur de repo. Il y a une légère possibilité que quelqu'un travaille sur repo tout en prenant des renforts.
-
la commande suivante vous donnera le clone nu de repo( comme il est dans le serveur), alors vous pouvez prendre un tar de l'emplacement lorsque vous avez cloné sans aucun problème.
git clone --bare {your backup local repo} {new location where you want to clone}
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 fait la configuration, de sorte que vous pouvez faire une poussée git pour mettre à jour votre sauvegarde, ce qui est probablement ce que vous voulez 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.
autant que je sache, vous pouvez simplement faire une copie du répertoire dans lequel se trouve votre dossier, c'est tout!
cp -r project project-backup