Versionskontrolle für die Zusammenarbeit (mit Unterschieden auf Wortebene)?

20

Die meisten Artikel werden jetzt gemeinsam verfasst, und die Mitarbeiter befinden sich häufig an verschiedenen Orten. Ich habe immer Versionskontrollsysteme für meine Dokumente und meinen Code verwendet und auch die Versionskontrolle als kritisch für kollaborative Softwareprojekte eingestuft, aber es scheint, dass viele Forscher theoretisch davon absehen, gemeinsame Arbeiten zu schreiben. Um meine Mitarbeiter davon zu überzeugen, dass die Versionskontrolle (Revisionskontrolle) eine gute Idee für die Zusammenarbeit ist, scheinen einige Voraussetzungen zu bestehen. Es ist nicht möglich, alle zu zwingen, sich Gedanken über bestimmte Konventionen für Zeilenumbrüche und Absätze zu machen oder Tabulator- / Leerzeichenkonvertierungen zu vermeiden.

Bietet jemand kostenloses Hosting für kleine freigegebene Dokument-Repositorys mit textdokumentfreundlicher Versionskontrolle an, die Unterschiede auf Wortebene ( nicht zeilenbasiert ) verarbeiten kann?

Wenn nicht, würde ich andere Vorschläge begrüßen, die auf Erfahrung basieren (bitte vermeiden wir Spekulationen).

Ich dachte an Git, Subversion, Mercurial, Darcs oder Bazaar, die für den Umgang mit Unterschieden auf Wortebene mit wdiff eingerichtet wurden, zusammen mit einer einfachen Methode zum Einrichten des durch öffentliche Schlüssel gesicherten Zugriffs (zum Beispiel über ssh). Allerdings scheint keiner der Versionskontrollanbieter, die ich mir angesehen habe, so etwas anzubieten. Für die wissenschaftliche Zusammenarbeit sind die von vielen dieser Unternehmen hervorgehobenen "Unternehmens" -Funktionen nicht sehr wichtig (viele Niederlassungen, Integration mit Trac, Prüfung durch Dritte, hierarchische Projektteams). Unterschiede auf Wortebene erscheinen jedoch kritisch, werden jedoch nicht unterstützt. Meiner Erfahrung nach muss bei Unterschieden auf Zeilenebene für Textdateien jeder vermeiden, Absätze und Editoren neu zu formatieren, die Tabulatoren in Leerzeichen ändern, oder umgekehrt, was zu Problemen führt. Es scheint auch viele falsche Bearbeitungskonflikte zu geben.

Siehe ähnliche Frage an MO über Tools für die Zusammenarbeit und die damit verbundene Fragen über bei TeX.SE, über die Versionskontrolle für LaTeX - Dokumente und LaTeX - Pakete für die Versionskontrolle . In der SVN-Hosting-Vergleichstabelle finden Sie eine große Liste von Hosting-Anbietern für nur eines der wichtigsten Versionskontrollsysteme.


Edit: Jukka Suomelas Antwort auf die TeX.SE-Frage " Beste LaTeX- fähige Diff- und Merge-Tools für Subversion " scheint der beste Vorschlag zu sein, der bisher die Interpretation der Deltas auf Wortebene behandelt . Darüber hinaus hat Jukka erklärt, wie die Unterschiede zwischen aufeinanderfolgenden Versionen auf der Repository-Seite von den Unterschieden auf Benutzerebene, die für die Konflikterkennung und das Zusammenführen von Änderungen verwendet werden, getrennt sind. Die Antwort von Jukka bei TeX.SE schließt gleichzeitige Bearbeitungen und Zusammenführungen ausdrücklich aus und verlässt sich stattdessen auf das traditionelle atomare Bearbeitungstoken, um Bearbeitungskonflikte zu vermeiden. Gibt es eine Möglichkeit, meine ursprüngliche Frage zu klären (und zu ändern), um sicherzustellen, dass Bearbeitungskonflikte auf der Basis von Wortunterschieden und nicht auf der Basis von Zeilenunterschieden gelöst werden können? Mit anderen Worten, kannwdiffoder ähnliche Tools in den Konflikterkennungsteil der Tools zur Versionskontrolle integriert werden, ähnlich wie Zeilenende- und Leerraumunterschiede ignoriert werden können?

András Salamon
quelle
3
Ich verstehe die Frage nicht ganz. In SVN werden beispielsweise Diffs, die einem Benutzer angezeigt werden, vom Client generiert, und es hängt von Ihrem SVN-Client (und seiner Konfiguration) ab, ob Sie wortbasierte Diffs oder zeilenbasierte Diffs erhalten. Das Unternehmen, das Ihr SVN-Repository hostet, hat darauf keinerlei Einfluss.
Jukka Suomela
2
@suresh Wenn Sie (geschriebene) Textdokumente bearbeiten, ist es oft mühsam, eine ganze Zeile in einem Diff zu scannen, um festzustellen, ob jemand ein Komma geändert hat. Das richtige Verhalten besteht normalerweise darin, die minimale Änderungseinheit anzuzeigen. Oder denken Sie an das Verhalten, wenn jemand keine Zeilenumbrüche verwendet. Wenn Sie dann ein einzelnes Wort ändern, wird der gesamte Absatz im Diff angezeigt, damit Sie die winzige Änderung finden.
Mark Reitblatt
2
Ich verwende keine harten Zeilenumbrüche, um Zeilen umzubrechen. In meinem Latex-Quellcode ist eine physische Textzeile normalerweise ein vollständiger Textabschnitt. Abhängig von der aktuellen Fensterbreite kann der Editor einen Zeilenumbruch für die Anzeige vornehmen. Es vereinfacht die Dinge sehr; Es besteht kein Grund zur Sorge, wenn ich einen Absatz umschreibe oder mit Ihren Mitautoren die "richtige" Linienbreite vereinbare. Sie benötigen jedoch ein Vergleichstool auf Wortebene, um die Änderungen schnell zu erkennen.
Jukka Suomela
2
@Andras Mein Punkt war, dass das VC-System nur in der Lage sein muss, die beiden Revisionen auf der Client-Seite zu rekonstruieren, und nicht überraschend, dass alle VC-Systeme dies können. Was Sie dann brauchen, ist ein Word-Level-Drei-Wege-Merge-Dienstprogramm, aber ich kenne keine. (TortoiseMerge und kdiff3 sind beispielsweise beide zeilenbasiert.) Wenn Sie über ein solches Dienstprogramm verfügen, ist jedes VC-System ausreichend, mit dem Sie ein externes Dienstprogramm zum Zusammenführen angeben können. (Das beinhaltet svn, bzr, git, hg ...)
Maverick Woo
3
Eine Quelle der Verwirrung ist hier, dass es einen eingebauten binären Diff-Algorithmus gibt (der auf der Ebene der einzelnen Bytes arbeitet), der von SVN in der Kommunikation zwischen Server und Client und auch intern vom Server zur Aufbewahrung des Repositorys verwendet wird kompakt. Dies ist lediglich eine Optimierung; es ist für den Benutzer nicht sichtbar und derselbe binäre Diff-Algorithmus kann auf jede Art von Datei angewendet werden. Alle vom Benutzer sichtbaren Dinge (vom Menschen lesbare Unterschiede, Zusammenführung, Konfliktlösung ...) geschehen auf der Client-Seite.
Jukka Suomela

Antworten:

11

Ich habe git verwendet, um an einigen in Latex geschriebenen Dokumenten zusammenzuarbeiten. Sie müssen einige Regeln einhalten:

  • Beginnen Sie jeden Satz in einer neuen Zeile. Latex ignoriert diese Zeilenumbrüche, solange keine Leerzeile vorhanden ist
  • Verwenden Sie die gleiche Konfiguration für die Formatierung (Tabulator / Leerzeichen / maximale Textbreite)
  • Erstellen Sie für optimale Ergebnisse eine .gitattributes-Datei in Ihrem Repository und fügen Sie die Zeile hinzu *.tex diff=tex. Dies macht diff auf die Textsyntax aufmerksam und führt zu einer aussagekräftigeren Ausgabe.

Sie können dann git diff --color-wordsund verwenden gitk --color-words, um die Wortunterschiede anzuzeigen (siehe auch diesen Artikel Wortweise Unterschiede in Git zur Konfiguration von git, um immer den word-diff-Algorithmus zum Anzeigen des git diff / git-Protokolls zu verwenden).

Um das manuelle Zusammenführen zu reduzieren, kann ich empfehlen, separate Dateien für Abschnitte und Unterabschnitte zu verwenden (abhängig von der Größe Ihres Dokuments).

Davy Landman
quelle
Ich werde in Betracht ziehen, dies für meine eigenen Dokumente zu tun. Es scheint ein einfacher Weg zu sein, die meisten meiner Ziele zu erreichen. Aber nicht jeder ist daran interessiert, auf diese Weise zu arbeiten ...
András Salamon
2
Wenn Sie zögern, auf diese Weise zu arbeiten, können Sie TortoiseGit verwenden, wenn Sie die git-Befehlszeile nicht mögen. Wenn es um jeden Satz in einem neuen Zeilenteil geht, ist dies nicht so wichtig, solange keine maximale Textbreite erzwungen wird. (Ich habe an einigen Projekten ohne diese Regel gearbeitet)
Davy Landman
Im Großen und Ganzen stimme ich zu, dass Git eine gute Wahl ist. Aber warum können separate Dateien für (Unter-) Abschnitte die Anzahl der manuellen Zusammenführungen verringern? Ich frage mich auch, wie es hilft, jeden Satz in einer neuen Zeile zu beginnen (manchmal mischen sich Sätze während der Bearbeitung).
dd1
zu den trennfiles: damals habe ich die genauen details der git-zusammenführung nicht verstanden, so dass das eigentlich nicht nötig ist, aber aus anderen gründen trotzdem ratsam. Der Satz in einer neuen Zeile ist sehr wichtig, da die meisten Werkzeuge um git immer Zeilenänderungen anzeigen. Wenn Sie dann eine andere Strategie verwenden, sagen wir, lassen Sie den Editor Zeilenumbrüche ausführen. Jedes Mal, wenn jemand 1 Wort in einem Absatz ändert, müssen Sie suchen es passierte und im Falle einer automatischen Zusammenführung: auf keinen Fall.
Davy Landman
4

Ich möchte wirklich andere ansprechen und vorschlagen, dass Sie sich hinsetzen und eine nette SVN-Strategie ausarbeiten. Ich verwende SVN, um meine gesamte "Forschungs" -Struktur zu hosten:

  • JabRef-Referenzverwaltung
  • Heruntergeladene PDFs
  • Artikel

Es ist großartig, weil es alles enthält und natürlich eine Geschichte liefert. Die Einschränkung ist, dass Sie Ihren eigenen Server benötigen. Wenn Sie jedoch einen vorhandenen Windows-Computer haben (oder was auch immer Sie möchten ), können Sie ihn einfach über VisualSVN Server installieren . Anschließend erstellen Sie geeignete Konten für Mitbearbeiter und gewähren ihnen Zugriff auf einen geeigneten Bereich (z. B. Lesezugriff auf Ihre JabRef-Bibtex-Datei und Lesen / Schreiben in einem gemeinsam genutzten Artikelbereich, der sich in Bearbeitung befindet).

TortiseSVN kann als Windows-Client für die Interaktion mit SVN verwendet werden. Sie müssen beim Verschieben / Löschen von Dateien und beim Kopieren von Ordnern vorsichtig sein (SVN speichert Metadaten in versteckten Ordnern in jedem Ihrer Ordner. Sie müssen also den Befehl delete in SVN ausführen, um sie zu entfernen. Dies ist etwas gewöhnungsbedürftig zu, aber die Investition lohnt sich).

Wenn sie dann mit einem Mitarbeiter zusammenarbeiten, müssen sie natürlich auch SVN verwenden. Aber auch hier ist die Investition in das Lernen nicht wertlos. Und über einige Gedanken können Sie es auch haben, so dass Sie nur Lesezugriff auf ihre Jabref-Datei haben (möglicherweise über die 'externe' Einrichtung in svn).

Auf diese Weise können Sie mit ein wenig Nachdenken und ein wenig Aufwand Dokumente wie gewohnt bearbeiten, Änderungen nachts vornehmen, morgens aktualisieren und alle Konflikte problemlos lösen.

Ich kann es nur empfehlen. Je mehr Leute ihre eigenen SVNs einrichten, desto besser, da dies in Zukunft nur die Optionen für die Zusammenarbeit verbessern wird (obwohl es natürlich von Vorteil wäre, wenn es vielleicht einen "Standard" für die Einrichtung eines wissenschaftlichen Archivs gäbe).

- Edit: Infact, ich habe einen solchen Vorschlag hier geschrieben: Strategie für die wissenschaftliche Zusammenarbeit mit LaTeX und SVN . Es wird vorgeschlagen, die Funktion svn externals zu verwenden, um eine einfache Zusammenarbeit zwischen Personen mit einer ähnlichen Konfiguration zu ermöglichen. Lassen Sie mich wissen, wenn es geändert werden muss oder einfach nicht angemessen ist.

Mittagsseide
quelle
4

Während ich Ihren großartigen Beitrag las und mich selbst nach einer Lösung umsah, stieß ich auf die Option, Änderungen auf Wortebene in gitk einzufärben . Der gitk-Parameter scheint eine neue und / oder undokumentierte Funktion zu sein, da die automatische Vervollständigung dies nicht bietet und die gitk-Manpage es nicht auflistet .
Hier sind die Optionen, die ich gefunden habe:

gitk --word-diff=plain
gitk --word-diff=porcelain
gitk --word-diff=color

Sie können mehrere Diskussionen zu diesem Thema finden, die nach "diff --color-words" gitk suchen .

Edit:
So sieht es aus ...

Unterschiede, die auf Wortebene mit gitk gefärbt wurden

JJD
quelle
1

Ich verstehe das Problem sehr gut. Ich habe angefangen, Kaleidoscope für Diffs mit Git zu verwenden. Es ist nur für Mac gedacht, aber die Vergleiche funktionieren besser als für wdiff. Außerdem verfügt es über eine Benutzeroberfläche und Live-Updates.


quelle
2
Mir scheint, dass Kaleidoscope nur ein zeilenbasiertes Diff-Tool ist, das zusätzlich Änderungen in jeder Zeile hervorhebt. Es ist kein Ersatz für wdiff und Freunde. Kaleidoscope erzeugt unlesbare Unterschiede, wenn Sie z. B. nur einen Textabschnitt nehmen und einige Zeilenumbrüche ändern. Wdiff-basierte Tools ignorieren einfach Änderungen an Zeilenumbrüchen.
Jukka Suomela