2009-02-16 9 views
3

Quel est le chemin le plus rapide pour restaurer un référentiel git après une erreur de système de fichiers sur le serveur principal? Imaginez que le serveur central de votre projet OSS échoue et que tous les validations pendant deux jours soient perdues après la restauration. Comment les récupérez-vous? Est-ce suffisant d'appeler "git push" sur tous les clients? Ou y a-t-il autre chose dont je dois tenir compte?Comment faire pour restaurer Git après une erreur fatale du système de fichiers?

Répondre

8

Chaque dépôt est également une sauvegarde du « référentiel principal » (qui est « principal » que par convention) donc un git push du dépôt qui a fait le plus récent git fetch ou git pull devrait être tout ce qu'il faut, à son état , bien sûr. Vous avez seulement besoin de prendre soin des crochets et autres, mais si vous dites que seuls les deux derniers jours de commits ont été perdus, ceux-ci n'ont probablement pas été blessés de toute façon.

+0

+1 pour les crochets; Je vais l'appliquer demain - hors des votes pour aujourd'hui :(Désolé –

+0

@Bombe: Félicitations, vous venez de passer 5000 points :) –

+0

En effet, je l'ai fait. Je vais supprimer tous vos commentaires! \ o/ – Bombe

2

Un git pull puis un git push devrait suffire.

Alternativement un git push -f mettra forcément à jour le serveur avec votre copie locale, mais cela peut poser des problèmes aux autres (s'il y a plusieurs committers). Faites-nous savoir si vous avez d'autres problèmes ou erreurs. Contactez-nous

1

Je pense qu'il pourrait être préférable de créer un nouveau repo sur le serveur:

% ssh [email protected] 
% mv /path/to/repo /path/to/repo.old 
% mkdir /path/to/repo 
% cd /path/to/repo 
% git init --bare 

pousser ensuite de tous les différents clones que vous avez. Je pense que cela évitera tout fichier corrompu qui pourrait être dans l'ancien repo, et il ne devrait pas y avoir de perte du tout, à condition que vous travailliez tous sur vos propres clones, et que personne ne déconnecte dans le repo du serveur.

+0

+1 Ce qui m'a donné une nouvelle idée: Pour sauvegarder, je clone le repo. De cette façon, la sauvegarde est toujours dans un état propre lorsque je l'envoie à la bande. –

+0

C'est vrai. Notez aussi qu'un "git clone --depth 1/path/to/repo" est un repo sans historique, et qui pourrait être utilisé pour le déploiement. –

Questions connexes