Gibt es ein vereinfachtes Versionskontrollsystem, das für Nicht-Programmierer geeignet ist, die in Emacs schreiben?

28

Ich bin Akademiker und liebe es, so viel wie möglich in Emacs zu schreiben. Eine wichtige Sache, die mir fehlt, ist die Möglichkeit, die Änderungen, die ich im Laufe der Zeit an einer Textdatei vorgenommen habe, einfach zu überprüfen.

Die Tracking-Funktionen in Wikipedia-Artikeln oder Google-Dokumenten entsprechen genau meinen Vorstellungen. Ich habe mit Versionskontrollsystemen wie git gespielt, weil sie von Emacs anscheinend gut unterstützt werden, aber ich fand sie schwierig zu bedienen und weitaus komplexer, als ich es brauchte. Repositories registrieren, ein- und auschecken, all das war nur mühsam.

Ich nehme nicht an, dass es Pakete gibt, die die von mir gesuchte Funktionalität auf relativ benutzerfreundliche Weise bereitstellen.

Brian Z
quelle
3
Ich empfehle die Verwendung von gitund magit- github.com/magit/magit - da Sie bereits ein wenig damit herumgespielt haben. Sie sollten sich wahrscheinlich mit den Befehlszeilenoptionen vertraut machen, um besser zu verstehen, was magitgeschieht. Emacs ist nicht für Nicht-Programmierer, aber Sie haben lange genug um die Szene gewesen, nicht von ihm Angst - :) Sie auch spielen , um zu versuchen mit wünschen können gist: github.com/defunkt/gist.el
lawlist
Technisch gesehen besteht das Ziel von vc-Befehlsgruppen darin, den Prozess der Verwendung von VCSs zu vereinfachen. Leider sind sie nicht so intuitiv, dass erfahrene Benutzer sie gut nutzen können. Andererseits sind Systeme wie die von Ihnen erwähnten sehr begrenzt, so dass man schnell Anforderungen entwickelt, die sie nicht erfüllen können. gnu.org/software/emacs/manual/html_node/emacs/… Es gibt einen vereinfachten Mechanismus zum Speichern von Backups. Aufgrund der obigen Ausführungen würde ich jedoch eher empfehlen, die Verwendung von VCS zu erlernen.
wvxvw
6
Ich bin auch Akademiker und habe begonnen, git/ magitfür die Versionskontrolle meiner Artikel zu verwenden. Es sieht einschüchternd aus, damit anzufangen, aber a) Sie müssen nicht alles auf einmal lernen, und b) es macht Spaß, es zu verwenden, nachdem Sie die anfängliche Lernkurve hinter sich gebracht haben. Ein guter Workflow hilft Ihnen auch dabei, Ihre Schreibaufgaben zu disziplinieren, da Sie ermutigt werden, Ihre Arbeit zu kommentieren. Auf diese Weise können Sie einen Zeitplan für die Entwicklung des Schreibprojekts erstellen.
Dan
Auf welchem ​​Betriebssystem arbeiten Sie? Ich habe RCS jahrelang und früher SCCS benutzt, aber es fing an, dass dies nicht mehr mit dem Betriebssystem gebündelt war, und ich bin kürzlich auf Git umgestiegen, nachdem ich einige Artikel unter Subversion hatte. Der Eincheckvorgang in git hat einen zusätzlichen Schritt im Vergleich zu RCS, aber in einigen Situationen ist es sehr nützlich, Dateigruppen zusammen einzuchecken.
Andrew Swann
Dies war in meinem Kopf, und auto-commit kann ein Teil der Geschichte sein: Automatisch zu git nach jedem speichern begehen projects.ryuslash.org/git-auto-commit-mode
grettke

Antworten:

43

Das Problem bei vorhandenen Versionskontrollsystemen ist nicht so sehr deren Komplexität. Es ist die Tatsache, dass es so viele Informationen gibt, dass es für Anfänger sehr schwierig sein kann, den Wald vor lauter Bäumen zu sehen (dh herauszufinden, was sie tun und nicht lernen müssen, wenn sie gerade erst anfangen ).

Dieser Beitrag konzentriert sich auf gitdie Steuerung von Emacs mithilfe eines Add-On-Pakets mit dem Namen magit. Ja , gitist komplex, aber Sie müssen nicht viel lernen, um es für den von Ihnen beschriebenen Zweck produktiv einzusetzen.

Ich gehe davon aus, dass Sie gitinstalliert haben (wenn Sie dies nicht tun, holen Sie es sich hier ) und dass Sie Emacs überhaupt nicht verlassen möchten.


Installieren magit

magitist ein gitFront-End für Emacs. Es ist bei MELPA erhältlich und kann wie folgt installiert werden:

M-x package-install RET magit RET

Auf gut Glück , dass Sie nicht Melpa in Ihrer Konfiguration aktiviert haben, können Sie Anweisungen finden , wie Sie das hier .

Repository einrichten

Angenommen, Sie haben einen Ordner ~/writingin Ihrem Ausgangsverzeichnis, der ein oder mehrere Dokumente enthält, die Sie der Versionskontrolle unterwerfen möchten.

  1. Öffnen Sie den Ordner in Dired: C-x d ~/writing RET
  2. Öffne eine Shell: M-x shell RET
  3. Tippen git initund drücken RET.

Das ist es. Sie haben jetzt ein gitRepository. Es besteht keine Notwendigkeit, es irgendwo zu "registrieren". gitist ein verteiltes Versionskontrollsystem; Es ist kein Remote-Server erforderlich, um Änderungen nachzuverfolgen.

Überprüfen Sie den Status Ihres Repositorys

  1. Wechseln Sie zurück zu dem Dired-Puffer, der die Dateien in Ihrem Repository auflistet.
  2. Tun M-x magit-status RET.

Sie können sich den Puffer als Ihr "Kontrollfeld" für die Arbeit mit Ihrem Repository vorstellen. Für ein neues Repository sieht es ungefähr so ​​aus:

Magit-Statuspuffer für neu erstelltes Repository

  • Sie können mit n( magit-goto-next-section) und p( magit-goto-previous-section) zwischen verschiedenen Abschnitten dieses Puffers navigieren .

  • Sie können den Puffer durch Drücken von g( magit-refresh) aktualisieren .

Beachten Sie, dass Sie den Statuspuffer aus jeder Datei oder jedem Verzeichnis aufrufen können, die bzw. das zu dem Repository gehört, das Sie zuvor eingerichtet haben.

Dateien hinzufügen

Wie Sie auf dem Screenshot sehen können, befinden sich drei Dateien im Repository, die gitderzeit nicht verfolgt werden. Um zu sagen gitzu starten , eine Datei - Tracking, müssen Sie inszenieren es: Mit Punkt auf der Datei , die Sie hinzufügen möchten, drücken Sie s. Der Statuspuffer sieht dann so aus:

Magit Status Puffer nach dem Hinzufügen von Datei-1.txt

Festschreiben

Nachdem Sie eine oder mehrere Dateien gespeichert haben, können Sie sie festschreiben , indem Sie auf drücken c c. Dadurch wird ein Puffer angezeigt, der wie folgt aussieht:

Magit Puffer für die Eingabe der Commit-Nachricht

Geben Sie oben Ihre Festschreibungsnachricht ein und drücken Sie C-c C-c, um die Festschreibung abzuschließen. (Zum Abbrechen drücken Sie C-c C-k.)

Der Statuspuffer sieht dann so aus:

Magit Status Buffer nach erstem Commit

Staging-Änderungen

Wenn Sie Änderungen an einer nachverfolgten Datei vornehmen, werden diese in einem separaten Abschnitt ("Nicht bereitgestellte Änderungen") im Statuspuffer aufgeführt:

Nicht bereitgestellte Änderungen (reduziert)

Um die Änderungen zu überprüfen, die Sie an der Datei vorgenommen haben, navigieren Sie zu der Zeile mit der Aufschrift Modified file-1.txtund drücken Sie TAB:

Nicht bereitgestellte Änderungen (erweitert)

Um diese Änderungen vorzunehmen, drücken Sie s:

Magit-Statuspuffer nach der Bereitstellung von Änderungen an der nachverfolgten Datei

Anzeigen vergangener Commits

Zum Schluss können Sie, wenn Sie frühere Commits überprüfen möchten, die Taste drücken l l(das sind zwei L-Zeichen in Kleinbuchstaben):

Magit Log Buffer

Sie können wie gewohnt durch den Puffer navigieren, der mit nund angezeigt wird p. Magit zeigt die Änderungen, die mit den einzelnen in diesem Puffer aufgelisteten Commits verbunden sind, in einem separaten Fenster an.

Zusammenfassung

Aus der Schale:

  • git init: gitRepository im aktuellen Verzeichnis initialisieren

Aus einer beliebigen Datei oder einem Verzeichnis, das einem gitRepository zugeordnet ist:

  • M-x magit-status RET

Aus dem Statuspuffer:

  • s um neue Dateien oder Bühnenänderungen hinzuzufügen

  • c c inszenierte Veränderungen vornehmen

    • C-c C-c Commit abschließen
    • C-c C-k Commit abbrechen
  • l l Commit-Protokolle anzeigen

Das ist es. :)

itsjeyd
quelle
7
Sie müssen nicht git initvon Shell. Wenn Sie M-x magit-statusirgendwo außerhalb eines Git-Repositorys anrufen, bietet es die Einrichtung eines solchen an. (Sie müssen es jedoch erneut aufrufen, um den Statuspuffer aufzurufen, nachdem Sie die Einrichtung abgeschlossen haben.)
wvxvw
Sie haben mich überzeugt, dass es sich lohnt, die Versionskontrolle erneut zu testen. Dies sollte eine hilfreiche Anleitung sein. Vielen Dank!
Brian Z
1
So weit so gut, aber eine Frustration ist, dass, wenn ich ein paar Wörter in einem langen Absatz ändere, der gesamte Absatz als inszenierte Änderung hervorgehoben wird. Ich möchte wirklich Veränderungen Wort für Wort und nicht Zeile für Zeile sehen.
Brian Z
3
@BrianZ Sie können die Variable anpassen magit-diff-refine-hunk, um das gewünschte Verhalten zu erhalten. Fügen Sie (setq magit-diff-refine-hunk t) oder (setq magit-diff-refine-hunk 'all) zu Ihrer Init-Datei hinzu. Sie können tun C-h v magit-diff-refine-hunk RET, um weitere Informationen zu den verschiedenen Einstellungen zu erhalten.
Es ist der
Sie müssen mit den Einstellungen für magit-diff-refine-hunk experimentieren, um näher an das zu gelangen, was Sie möchten. Die Standardeinstellungen eignen sich hervorragend zum Nachverfolgen von Codeänderungen, sind jedoch nicht unbedingt hervorragend, wenn Sie Änderungen in Profis nachverfolgen möchten. Es kann ein bisschen dauern, bis Sie es richtig verstanden haben, aber es sollte möglich sein, und wenn Sie es dann tun, werden Sie vermutlich nie mehr zurückkehren!
Tim X
11

Zusätzlich zu magit(wie @ itsjeyds Antwort gekonnt zeigt) können Sie auch versuchen git-timemachine, die Funktionen zum schnellen Durchlaufen älterer Versionen einer Datei unter gitVersionskontrolle bereitzustellen. Laut der Github-Seite vermitteln die folgenden Standard-Tastenkombinationen einen Eindruck davon, was Sie tun können:

  • p Besuchen Sie die frühere historische Version
  • n Besuchen Sie die nächste historische Version
  • w Kopieren Sie den abgekürzten Hash der aktuellen historischen Version
  • W Kopieren Sie den vollständigen Hash der aktuellen historischen Version
  • q Verlasse die Zeitmaschine.
Dan
quelle
8

Ich vermute, Sie werden den Backup-Modus und / oder den Backup-Walker sehr interessant finden.

Beide zielen darauf ab, die vorhandenen Sicherungsmechanismen in Emacs zu nutzen und einen besseren Zugriff und eine bessere Sichtbarkeit Ihres Dateiverlaufs zu ermöglichen, ohne dass ein zusätzliches VCS erforderlich ist.

Phils
quelle
6

Wie bereits erwähnt, ist das Emacs-Backup-System eine einfache Möglichkeit, verschiedene Versionen einer Datei zu haben.

(setq backup-directory-alist '(("." . "~/emacs-backups"))
      version-control 'numbered
      make-backup-files t
      delete-old-versions 'never)

Hierbei wird ein dediziertes Verzeichnis für nummerierte Sicherungen verwendet, das niemals automatisch gelöscht wird. Dann können Sie jederzeit C-u C-x C-seine andere Version erstellen.

Allerdings gibt es meiner Meinung nach keine einfache, einsatzbereite Schnittstelle, um z. B. diese Versionen zu unterscheiden. Sie müssten also ein oder zwei dieser Backups manuell öffnen und ediff-buffersdarauf und / oder auf den ursprünglichen Puffer anwenden.

Politza
quelle
1
Sie können die Backups zum Beispiel mit folgendem Befehl vergleichen : gnu.org/software/emacs/manual/html_node/emacs/… (markieren Sie eine Datei mit dem mVerschiebepunkt in die andere und drücken Sie =).
wvxvw 31.01.15
2
Dies schien in der Theorie eine attraktive Option zu sein, aber es gibt mir nur einen überwältigenden Ordner voller zufälliger Sicherungen. Die Versionen, die mich interessieren, sind komplett vergraben. Vielleicht gibt es eine Möglichkeit, eine nummerierte Sicherung einer Datei manuell auszulösen, aber nur dann, wenn ich es möchte? Wenn ich diesem Backup auch eine kurze "Commit-Nachricht" anhängen könnte, wäre dies eine sehr schöne Lösung. Aber jetzt, ich denke , ich stecken Lernen magit bin :)
Brian Z
2

Ich hatte noch keine Gelegenheit, diese Lösung zu verwenden, aber vielleicht möchten Sie auch Cory Doctorow und Thomas Gideons Flashbake in Betracht ziehen . Das sagt Doctorow dazu :

Ich wurde dazu nach Gesprächen mit mehreren digitalen Archivaren aufgefordert, die sich darüber beschwerten, dass die Autoren vor dem computerisierten Zeitalter eine Reihe vollständiger Entwürfe auf dem Weg zu Veröffentlichungen mit Löschungen, Anmerkungen usw. erstellt hatten. Dies ist Archivgold, da es den kreativen Prozess auf eine Weise beleuchtet, die oft die verborgenen Geschichten hinter den Büchern enthüllt, die uns wichtig sind. Im Gegensatz dazu produzieren viele Autoren nur eine einzelne (oder einige) digitale Datei (en), die bis zur Veröffentlichung modifiziert wurde, ohne systematische Aufzeichnungen der Zwischenzustände zwischen dem ersten Teil der Komposition und dem endgültigen Entwurf.

Geben Sie Flashbake ein. Alle 15 Minuten überprüft Flashbake alle Dateien, die überprüft werden sollen (ich habe alle meine aktuellen Fiktionen, meine Aufgabenliste, meine Datei mit nützlichen Informationen und die vollständigen elektronischen Versionen meiner letzten Bücher im Blick ) und zeichnet alle seit der letzten Überprüfung vorgenommenen Änderungen auf, wobei sie mit der aktuellen Zeitzone auf der Systemuhr, dem Wetter in dieser Zeitzone, wie von Google abgerufen, und den letzten drei Überschriften mit Ihrer By-Line darunter im RSS Ihres Blogs kommentiert werden feed (Ich habe dies als "Wo bin ich, wie ist es dort und woran denke ich?" charakterisiert.) Es zeichnet auch die Betriebszeit Ihres Computers auf. Für eine zukünftige Version würde es Spaß machen, die letzten drei Songs von Ihrem Musikplayer spielen zu lassen.

That being said, ich hatte nie die Gelegenheit , es zu testen, da ich ein Schreiben endete viel in Org-Mode von Sachen, und war viel Programmierung und ... na ja ... ich irgendwie noch besser zu verwenden magit, und am Ende brauchte ich es einfach nicht zu benutzen.

In jedem Fall wurde diese Lösung richtet an Autoren arbeiten an nicht-technischen Projekten. Möglicherweise stellen Sie fest, dass es Ihren Anforderungen entspricht.

Tariq Kamal
quelle
1

Obwohl es absolut unabhängig ist, emacskönnen Sie Ihre Textdateien dennoch in Dropbox speichern. Wenn Sie ein Profi-Benutzer sind, können Sie den erweiterten Versionsverlauf verwenden . (Wenn Sie eine Verschlüsselung wünschen, sollten Sie sich SparkleShare ansehen .)

Dann gibt es Flashbake, der ein bisschen automatisiert ist ( hier ist ein Tutorial ).

Auch wurde gefragt , an anderer Stelle zu , für die die Antworten , die Sie vielleicht nützlich finden.

Zsolt Botykai
quelle
Flashbake sieht sehr vielversprechend aus. Ich werde es auf jeden Fall versuchen.
Brian Z
-1

Sie können Dropbox verwenden. Mit jedem Drücken von Cx Cs wird eine überarbeitbare Version Ihrer Datei erstellt. Für die Verschlüsselung meiner Textdateien verwende ich GNU Privacy Guard, der von Emacs unterstützt wird.

Роман Захаров
quelle