2010-07-20 4 views

Répondre

6

J'ai voté pour la réponse de catchyifyoutry car il a les étapes que vous utiliserez probablement, mais voici une liste pratique.

D'abord, cependant, un rappel. Si vous avez déjà placé ce référentiel en semi-public et que les utilisateurs ont extrait le référentiel, aucun des conseils ci-dessous ne fonctionnera. Quand ils poussent et que vous tirez, vous récupérez les changements d'origine dans leur forme non modifiée. Votre seul recours est de parler à chaque personne qui a un clone et demandez-lui de le supprimer et de le recloner. Cela dit, à la liste:

façons d'effacer les fichiers que vous avez commis sur un accident

  • Si vous ne l'avez pas encore tiré ou quoi que ce soit commis d'autre: hg rollback agira comme un défont
  • Si vous êtes prêt à jeter les dernières révisions N: hg clone -r -N repo-with-too-much repo-with-N-fewer changesets # exemple: hg clone -r -2 big-repo small-repo
  • Si votre changement a été trop longtemps pour l'un de ces être d'accord: hg convert --filemap myfilemap.txt too-big-repo new-repo

Dans ce dernier cas myfilemap.txt a en elle:

exclude path/to/file/to/remove 

Notes:

  • l'clone -r cas demande techniquement pour le clone minimal qui pourrait inclure la pointe-N révision, qui, si vous avez un repo branchy. Additionall pull -r lignes (une par tête) sera nécessaire pour tirer sur l'autre histoire non linéaire.
  • Avec la solution hg convert, le hashcode de tous les changeset modifiés et de tous leurs descendants sera modifié.
+0

Cette astuce --filemap ressemble exactement à ce dont j'ai besoin. Bien qu'un peu encombrant, cela devrait être nécessaire dans des cas exceptionnels. Merci beaucoup! –

-2

Ne stockez jamais une chose aussi importante qu'un référentiel de code sur une clé USB. C'est une invitation à perdre tout votre code très bientôt! Acheter un disque dur externe avec suffisamment d'espace et au moins 2 disques séparés à l'intérieur, que vous pouvez mettre en miroir. Rangez-le de façon permanente quelque part et ne le transportez pas. Si vous avez besoin d'un autre accès, utilisez une connexion Internet sécurisée pour accéder à votre disque dur à distance.

+1

Dans ma configuration, j'ai au moins 2 copies: une sur le disque dur de mon PC et une sur la clé USB. Chacun d'eux peut servir de sauvegarde. Je trouve cela suffisant. –

+0

Le code vous appartient (ainsi que le choix) :) J'ai connu un pic électrique, qui a brûlé mon PC, y compris le disque dur interne, et tout ce qui est connecté sur les ports USB, y compris une clé USB ... –

+0

frits tout ce qui est connecté aux ports USB, ne serait-ce pas tuer votre disque dur externe aussi? Je recommande personnellement de conserver un référentiel distant sur un service «cloud» tel que BitBucket. – StriplingWarrior

4

Vous pouvez restaurer le dernier commit avec les gros fichiers, si le commit est vraiment accidentel. Voir

hg help rollback 

Bien sûr, cela ne fonctionne pas si vous avez commis d'autres choses importantes sur le dessus dans l'intervalle. Une autre façon serait d'utiliser strip pour supprimer la branche entière contenant les gros fichiers.

Faites attention, avant d'effectuer l'une de ces opérations, assurez-vous de bien comprendre ce que vous faites! Testez d'abord les commandes sur un référentiel de test ou un clone.

Questions connexes