57 votes

Est-ce que "git push --mirror" est suffisant pour sauvegarder mon référentiel?

Je suis un solo développeur de, travailler dans un dépôt Git local. Pour les sauvegardes, je veux envoyer une copie exacte de ce référentiel à un autre serveur.

Est-il suffisant pour faire cela?

git push --mirror

Je demande parce que je peux parfois exécuter cette commande deux ou trois fois avant de Git me dit "Tout up-to-date", donc, apparemment, il n'est pas un miroir exact. Il semble être re-pousser le suivi des branches...?

$ git push --mirror
Counting objects: 42, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (30/30), done.
Writing objects: 100% (30/30), 5.09 KiB, done.
Total 30 (delta 17), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  mybranch -> mybranch
$ git push --mirror
Total 0 (delta 0), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  origin/mybranch -> origin/mybranch
$ git push --mirror
Everything up-to-date

Ce qui se passe, et est-ce une bonne stratégie?

Edit: je n'aime pas utiliser quelque chose comme git bundle ou .tar.bz2 archives, parce que j'aimerais que la sauvegarde à être accessible de la copie de travail. Depuis mon serveur de sauvegarde est connecté au net et de toujours sur, c'est une belle façon d'accéder au référentiel quand je suis sur la route.

34voto

Jakob Borg Points 10869

La raison pour laquelle vous voyez quelque chose de poussé le deuxième, c'est qu' --mirror pousse un peu plus que prévu. En dehors de vos branches locales, il pousse votre télécommande branches, parce miroir implique tout. Ainsi, lorsque vous poussez normalement (ou avec --mirror), mybranch est poussé et origin/mybranch est mis à jour pour refléter le nouvel état sur l'origine. Lorsque vous appuyez --mirror, origin/mybranch est aussi poussé.

Cela se traduit dans l'étrangeté de vous voir, et aussi dans une situation pire étrangeté quand tirez-vous de cette distance; vous obtenez les branches nommées origin/origin/mybranch etc. Il est donc généralement préférable d'utiliser --mirror , pour une durée de copies, et il suffit d'utiliser la normale push (peut-être avec --all) pour un usage normal.

De toujours repousser toutes les branches et les tags, vous pouvez mettre à jour .git/config comme:

[remote "origin"]
  url = ...
  fetch = ...
  push = +refs/heads/*
  push = +refs/tags/*

Qui fera la normale pousser semblable à un miroir, sauf qu'il ne sera pas supprimer les branches qui n'existent pas à la source ou de la non-avance rapide des mises à jour.

26voto

nschum Points 3621

Malheureusement, vous ne recevez pas une copie exacte avec push. Vous perdez votre cachette .

11voto

Greg Sexton Points 4621

Je dirais que c'est une très bonne stratégie pour la sauvegarde de votre référentiel. Il doit procéder à une poussée de votre point d'origine à distance pour tous les ref dans le référentiel. Rendant complet "miroir" de votre dépôt local.

EDIT: je viens de voir votre mise à jour de la description dans la question. Il semble que git est de pousser à distance ref de la télécommande elle-même avec tout le reste. Une fois le push est terminé, la distance réf sera mis à jour pour refléter le fait que vous avez tout simplement poussé à elle. Ce sera maintenant de date avec le dépôt distant donc, une nouvelle impulsion est nécessaire. Si cela ne vous satisfait pas. Vous pouvez supprimer cette distance ref avec

git push :origine/mybranch

et ensuite utiliser

git push --tous

rappelez-vous que ce ne sera pas pousser de nouvelles branches de vous créer bien.

5voto

fantabolous Points 431

Ce que je fais, c'est:

Le programme d'installation le repo: git clone --mirror user@server:/url-to-repo.git

Puis, quand vous voulez vous rafraîchir la sauvegarde: git remote update du clone emplacement.

Cela nous conforte dans toutes les branches, y compris les nouvelles branches qui seront ajoutés plus tard, mais il est intéressant de noter que les branches qui sont supprimés ne sont pas supprimés à partir du clone (qui pour une sauvegarde peut être une bonne chose).

À partir de http://www.garron.me/en/bits/backup-git-bare-repo.html

4voto

RaptorX Points 467

J'utilise habituellement git push --all . J'utilise seulement --mirror quand j'ai besoin de pousser des branches nouvellement créées ou j'ai supprimé certaines branches et je ne veux pas les nommer un par un. Sinon, les push --all fonctionnent habituellement comme il me faut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X