4 Stimmen

Einen unendlichen "Rückgängig-Stapel" erhalten, ohne in das Repository zu übertragen?

Wie viele Programmierer neige ich zu periodischen "Inspirationsanfällen", in denen ich plötzlich das Licht sehe und eine größere Operation an meinem Code durchführe. Normalerweise klappt das gut, aber es gibt Zeiten, in denen ich später feststelle, dass ich - aufgrund von Schlaf-/Koffeinmangel oder einfach einem unvollkommenen Verständnis des Problems - etwas sehr Dummes getan habe.

Der nächste Schritt ist dann, den Schaden rückgängig zu machen. Am einfachsten geht das mit dem Rückgängig-Stapel in meinem Editor es sei denn, ich habe die Datei irgendwann mal geschlossen. Die Versionskontrolle ist der nächste Schritt, aber wenn ich zwischen meinem letzten Commit (ich habe die Gewohnheit, keinen Code zu committen, der den Build kaputt macht) und dem Moment der Inspiration Änderungen vorgenommen habe, sind diese verloren. Sie waren nicht im Repository, also hat der Code nie existiert.

Ich würde meine Arbeitsumgebung gerne so einrichten, dass ich mir darüber keine Gedanken machen muss, aber ich habe noch nie eine völlig zufriedenstellende Lösung gefunden. Idealerweise:

  1. Jedes Mal, wenn ich eine Datei speichere, würde eine neue, wiederherstellbare Version erstellt werden.
  2. Diese "automatisch gespeicherten" Versionen werden das Haupt-Repository nicht überladen. (Die große Mehrheit von ihnen wäre völlig nutzlos; ich drücke mehrmals pro Minute Strg-S.)
  3. Die "automatisch gespeicherten" Versionen müssen lokal gespeichert werden, damit ich sie sehr schnell durchsehen kann. Ein Repository mit einer Bearbeitungszeit von 3 Sekunden reicht einfach nicht aus, wenn man schnell durch Hunderte von Revisionen blättern will.

Optionen, die ich in Betracht gezogen habe:

  • Übertragen Sie einfach in das Haupt-Repository, bevor Sie eine große Änderung vornehmen, auch wenn der Code möglicherweise fehlerhaft ist. Nachteile: Wenn ich "inspiriert" bin, habe ich in der Regel nicht die Geistesgegenwart dafür; das macht den Build kaputt.
  • Ein lokal gehostetes Subversion-Repository mit aktivierter automatischer Versionierung, gemountet als "Webordner". Nachteile: spielt nicht gut mit Arbeitskopien anderer Repositories zusammen; das Einbinden von richtigen WebDAV-Ordnern unter Windows ist bestenfalls mühsam.
  • Wie bei der vorherigen Methode, aber ich verwende stattdessen einen Zweig im Hauptrepository und führe ihn zu trunk zusammen, wenn ich normalerweise manuell übertragen würde. Nachteile: nicht bei allen gehosteten Repositorys kann die automatische Versionskontrolle aktiviert werden; erfüllt nicht die Punkte 2 und 3 oben; kann nicht sicher von Stamm zu Zweig zurückmischen.
  • Wechseln Sie zu einem DVCS und "kombinieren" Sie alle meine kleinen Commits beim Pushen. Nachteile: Ich weiß nicht das Geringste über DVCS; manchmal ist Subversion das einzige verfügbare Werkzeug; ich weiß nicht, wie ich Punkt 1 oben erfüllen kann.
  • Speichern der Arbeitskopie in einem versionierten Dateisystem. Nachteile: Gibt es so etwas auch für Windows? Wenn ja, hat Google es versäumt, mir den Weg zu zeigen.

Kennt jemand ein Werkzeug oder eine Kombination von Werkzeugen, mit denen ich das erreichen kann, was ich will? Oder habe ich mich selbst mit widersprüchlichen Anforderungen konfrontiert? (Was ich ziemlich stark vermute.)

更新しました。 Nach einer genaueren Untersuchung der Tools habe ich bereits verwenden (seufz), stellt sich heraus, dass mein Texteditor hat eine sehr nette Mehrfachsicherungsfunktion, die meine Bedürfnisse nahezu perfekt erfüllt. Es bietet nicht nur die Möglichkeit, alle Sicherungen in einem "versteckten" Ordner zu speichern (der dann zu den globalen Ignorierungen für VCSes hinzugefügt werden kann), sondern erlaubt auch das Durchsuchen und sogar den Vergleich mit Sicherungen direkt im Editor.

Problem gelöst. Danke für den Rat, Leute!

0 Stimmen

Ich habe gerade bemerkt, dass Sie nicht erwähnt haben, welchen Editor Sie verwenden. Vielleicht gibt es eine elegantere Option in Ihrem Editor, auf die jemand hinweisen könnte.

0 Stimmen

EditPad Pro, das zwar über ein System für Mehrfachsicherungen verfügt, aber das Dateisystem mit den Sicherungen überfrachtet. Ich teste es jetzt, um zu sehen, wie gut es für mich funktioniert.

3voto

Sufian Punkte 8277

Verteilte Versionskontrolle. (mercurial, git, etc...)

Das Wesentliche an der Geschichte ist, dass es keine Checkouts gibt, sondern nur Klone eines Repositorys.

Ihre Übertragungen sind nur für Sie sichtbar, bis Sie sie in den Hauptzweig zurückschieben.

Möchten Sie eine radikale experimentelle Veränderung vornehmen? Klonen Sie das Repository, machen Sie tonnenweise Übertragungen auf Ihrem Computer. Wenn es klappt, pushen Sie es zurück; wenn nicht, machen Sie einfach ein Rollback oder löschen Sie das Repository.

0 Stimmen

Wenn ich Hg als Beispiel nehme (da es von Google Code unterstützt wird, das ich häufig verwende), wenn ich eine Billion lokaler "Auto-Commits" mache, kann ich sie dann in ein einziges Changeset zusammenfassen, wenn ich sie in den Hauptzweig schiebe? Oder wird jede einzelne Änderung von ein paar Zeichen für jeden sichtbar sein, der das Repository durchsucht?

0 Stimmen

Ja, Ihre Commits (hg commit) werden für jeden sichtbar sein, der das Repository durchsucht, nachdem Sie sie zurückgeschoben haben. Wiederholtes Sichern ist nicht möglich. Wenn Sie für die kleinen Zeichen speichern und für jedes Arbeitsdelta committen, sollten Sie vor Peinlichkeiten sicher sein. Irgendetwas sagt mir, dass dies wahrscheinlich umgangen werden kann, ich habe es nur noch nie selbst machen müssen.

1voto

kay.one Punkte 7492

Wenn Sie Windows Vista, 7 oder Windows Server 2003 oder eine neuere Version verwenden, können Sie die Schattenkopie nutzen. Das Eigenschaftsfenster für Ihre Dateien enthält eine neue Registerkarte "Vorherige Version", die die vorherige Version der Datei aufzeichnet.

sollte der Dienst den Snapshot automatisch erstellen, aber um sicher zu gehen, können Sie direkt nach Ihrem "Geistesblitz" folgenden Befehl ausführen

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

Das hat mir schon einige Male den Arsch gerettet.

Schattenkopie

0 Stimmen

Das klingt, als könnte es ganz gut funktionieren. Schade, dass ich immer noch XP benutze. Vielleicht sollte ich mich mal mit Windows 7 beschäftigen.

0 Stimmen

RTMs nächste Woche! Ansonsten probieren Sie das RC aus. Es ist ein großartiges Betriebssystem

1voto

Dingo Punkte 3255

Die meisten Editoren speichern die letzte Version Ihrer Datei vor dem Speichern in einer Sicherungsdatei. Sie könnten diesen Vorgang so anpassen, dass Sie anstelle der normalen Tilde eine Revisionsnummer anhängen. Dann hätten Sie bei jedem Speichern eine Kopie der Datei. Wenn das zu viel Speicherplatz beanspruchen würde, können Sie auch Diffs für jede Änderung erstellen und Ihren Editor so anpassen, dass er die Patches nacheinander anwendet, bis Sie die gewünschte Revision erreicht haben.

0 Stimmen

Hmm mein Editor hat tatsächlich ein eingebautes Multi-Backup-System wie dieses, an das ich einfach nicht gedacht hatte. Duh, ich. Es scheint allerdings eine globale Einstellung zu sein, was bei nicht-codierenden Anwendungen irritierend wirken könnte. Andererseits könnte ich feststellen, dass ich wie Backups für alles zu haben. Das muss ich auf jeden Fall einmal ausprobieren.

0voto

Martin v. Löwis Punkte 120025

Ich denke, es ist an der Zeit, den Editor zu wechseln. Emacs verfügt über eine Variable version-control, die festlegt, ob Emacs beim Speichern einer Datei automatisch mehrere Sicherungskopien erstellt und diese mit foo.~1~, foo.~2~ usw. benennt. Weitere Variablen bestimmen, wie viele Sicherungskopien angelegt werden sollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X