Obtenir une “stack d’annulation” infinie sans s’engager dans le référentiel?

Comme beaucoup de programmeurs, je suis sujet à des crises périodiques d’inspiration dans lesquelles je vais soudainement voir la lumière et effectuer une opération majeure sur mon code. En règle générale, cela fonctionne bien, mais il m’arrive de découvrir plus tard – à cause du manque de sumil / de caféine ou simplement une compréhension imparfaite du problème – que j’ai fait quelque chose de très stupide.

Lorsque cela se produit, l’étape suivante consiste à inverser les dégâts. Plus facilement, cela signifie la stack d’annulation dans mon éditeur … à moins que je ne ferme le fichier à un moment donné. Le contrôle de version est le suivant, mais si j’ai apporté des modifications entre mon dernier commit (je ne commets pas de code qui casse la construction) et le moment de l’inspiration, elles sont perdues. Ce n’était pas dans le référentiel, donc le code n’a jamais existé.

Je voudrais configurer mon environnement de travail de telle manière que je n’ai pas besoin de m’inquiéter à ce sujet, mais je ne trouve jamais de solution complètement satisfaisante. Idéalement:

  1. Une nouvelle version récupérable serait créée chaque fois que je sauvegardais un fichier.
  2. Ces versions “enregistrées automatiquement” n’encombreront pas le référentiel principal. (La grande majorité d’entre eux seraient complètement inutiles; je frappe Ctrl-S plusieurs fois par minute).
  3. Les versions “enregistrées automatiquement” doivent résider localement afin que je puisse les parcourir très rapidement. Un repository avec un délai d’exécution de 3 secondes ne suffira tout simplement pas lorsque vous tenterez de numériser rapidement des centaines de révisions.

Options que j’ai envisagées:

  • Il suffit de vous engager dans le repository principal avant de faire un gros changement, même si le code est peut-être cassé. Contre: quand “inspiré”, je n’ai généralement pas la présence d’esprit pour cela; rompt la construction.
  • Un repository Subversion hébergé localement avec le contrôle de version automatique activé, monté en tant que “Dossier Web”. Inconvénients: ne joue pas bien avec les copies de travail des autres référentiels; Le assembly de dossiers WebDAV appropriés dans Windows est au mieux pénible.
  • Comme avec la méthode précédente, mais en utilisant une twig dans le référentiel principal et en fusionnant dans le tronc chaque fois que je le ferais normalement manuellement. Inconvénients: tous les référentiels hébergés ne peuvent pas être dotés du contrôle de version automatique. ne répond pas aux points 2 et 3 ci-dessus; ne peut pas inverser en toute sécurité du tronc à la twig.
  • Passer à un DVCS et “combiner” tous mes petits commits en poussant. Inconvénients: je ne connais pas la première chose à propos des DVCS; Parfois, Subversion est le seul outil disponible. Je ne sais pas comment répondre au point 1 ci-dessus.
  • Stocker la copie de travail sur un système de fichiers versionné. Inconvénients: existe-t-il pour Windows? Si oui, Google n’a pas réussi à me montrer le chemin.

Est-ce que quelqu’un connaît un outil ou une combinaison d’outils qui me permettra d’obtenir ce que je veux? Ou est-ce que je me suis posé des exigences contradictoires? (Ce que je soupçonne assez fortement.)

Mise à jour: Après avoir examiné de plus près les outils que j’utilise déjà (soupir), il se trouve que mon éditeur de texte a une très bonne fonctionnalité de multi-sauvegarde qui répond parfaitement à mes besoins. Il a non seulement une option pour stocker toutes les sauvegardes dans un dossier “caché” (qui peut ensuite être ajouté aux ignores globaux pour VCS), mais permet également de naviguer et même de se différencier des sauvegardes directement dans l’éditeur.

Problème résolu. Merci pour les conseils, les gars!

La plupart des éditeurs stockent la dernière version de votre fichier avant l’enregistrement dans un fichier de sauvegarde. Vous pouvez personnaliser ce processus pour append un numéro de révision au lieu du tilde normal. Vous devriez alors avoir une copie du fichier chaque fois que vous avez enregistré. Si cela consum trop d’espace disque, vous pouvez choisir de créer des diffs pour chaque modification et de personnaliser votre éditeur pour appliquer séquentiellement les correctifs jusqu’à la révision souhaitée.

Contrôle de version dissortingbué. (mercurial, git, etc …)

L’essentiel de l’histoire est qu’il n’ya pas de checkouts, seulement des clones d’un repository.

Vos commits ne sont visibles que jusqu’à ce que vous les repoussiez dans la twig principale.

Voulez-vous faire un changement expérimental radical? Clonez le repository, faites des tonnes de commits sur votre ordinateur. Si cela fonctionne, repoussez-le; sinon, il suffit de revenir en arrière ou de supprimer le repository.

Si vous utilisez Windows Vista, 7 ou Windows Server 2003 ou plus récent, vous pouvez utiliser Shadow Copy. Fondamentalement, la fenêtre de propriétés pour vos fichiers aura un nouvel onglet «version précédente» qui conserve la version précédente du fichier.

le service devrait automatiquement générer l’instantané, mais pour être sûr, vous pouvez exécuter la commande suivante juste après votre moment d’inspiration

'vssadmin create shadow /for=c:\My Project\' 

il a sauvé mon cul à plusieurs resockets.

Copie d’ombre

Je pense qu’il est temps de changer de rédacteur. Emacs a un contrôle de version variable, qui détermine si Emacs créera automatiquement plusieurs sauvegardes pour un fichier lors de sa sauvegarde, en les nommant foo. ~ 1 ~, foo. ~ 2 ~ etc. Des variables supplémentaires déterminent le nombre de copies de sauvegarde à conserver.