So führen Sie eine bessere Versionskontrolle von Dokumenten für Excel- und SQL-Schemadateien durch

98

Ich bin verantwortlich für mehrere Excel-Dateien und SQL-Schemadateien. Wie sollte ich eine bessere Versionskontrolle für Dokumente für diese Dateien durchführen?

Ich muss das geänderte Teil (anderes Teil) in diesen Dateien kennen und alle Versionen als Referenz behalten. Momentan füge ich den Zeitstempel an den Dateinamen an, aber ich fand ihn ineffizient.

Gibt es eine Möglichkeit oder bewährte Methode, um die Versionskontrolle von Dokumenten zu verbessern?

Die Redakteure senden mir die Dateien übrigens per E-Mail.

Marcus Thornton
quelle
5
Ich kann diese Excel-Dateien in CSV-Dateien konvertieren und sie dann mit git verfolgen, damit ich diff verwenden kann, um die Änderung zu sehen. Gibt es noch andere gute Praktiken?
Marcus Thornton
Sehen Sie sich die anderen Antworten an, die meiner Meinung nach besser sind als die, die Sie akzeptiert haben.
Nealmcb

Antworten:

44

Da hast du deine Frage mit getaggt Ich gehe davon aus, dass Sie nach der Verwendung von Git fragen.

Nun, SQL-Dumps sind normale Textdateien, daher ist es absolut sinnvoll, sie mit Git zu verfolgen. Erstellen Sie einfach ein Repository und speichern Sie es darin. Wenn Sie eine neue Version einer Datei erhalten, diese einfach überschreiben und festschreiben, wird Git alles für Sie herausfinden und Sie können Änderungsdaten anzeigen, bestimmte Versionen dieser Datei auschecken und verschiedene Versionen vergleichen.

Gleiches gilt, .xlsxwenn Sie sie dekomprimieren. .xlsxDateien sind komprimierte Verzeichnisse von XML-Dateien (siehe So stellen Sie eine gültige XLSX-Datei ordnungsgemäß aus ihren internen Unterkomponenten zusammen? ). Git betrachtet sie als binär, sofern sie nicht dekomprimiert sind. Es ist möglich, .xlsxdie Änderungen an den einzelnen XML-Dateien im Archiv zu entpacken und zu verfolgen.

Sie können dies auch mit .xlsDateien tun , aber das Problem hier ist, dass das .xlsFormat binär ist, sodass Sie keine aussagekräftigen Unterschiede daraus erhalten können. Sie können jedoch weiterhin den Änderungsverlauf anzeigen und bestimmte Versionen auschecken.

Kirelagin
quelle
4
Ja, ich weiß, Idiot. Ich denke, Git ist gut beim Verfolgen von SQL-Schemata. Was Excel-Dateien (.xlsx und .xls) betrifft, kann mir das Verfolgen mit git nicht zeigen, was aus menschlicher Sicht geändert wurde, da es sich um Binärdateien handelt. Das ist es, was mich verwirrt.
Marcus Thornton
2
@MarcusThornton .xlsxist XML, sollte also gut funktionieren. Im Allgemeinen gibt es keine Möglichkeit, zwei .xlsDateien einfach zu vergleichen . Sie könnten wahrscheinlich einen Pre-Commit-Hook hinzufügen, der einen in die .csvNähe bringt, und Sie können diese unterscheiden.
Kirelagin
86

Die Antwort, die ich hier geschrieben habe, kann in diesem Fall angewendet werden. Ein Tool namens xls2txt kann für Menschen lesbare Ausgaben von XLS-Dateien bereitstellen. Kurz gesagt, sollten Sie dies in Ihre .gitattributes-Datei einfügen:

*.xls diff=xls

Und in der .git / config:

[diff "xls"]
    binary = true
    textconv = /path/to/xls2txt

Ich bin mir sicher, dass Sie ähnliche Tools auch für andere Dateitypen finden können, was git diffein sehr nützliches Tool für Office-Dokumente darstellt. Folgendes habe ich derzeit in meiner globalen .gitconfig:

[diff "xls"]
    binary = true
    textconv = /usr/bin/py_xls2txt
[diff "pdf"]
    binary = true
    textconv = /usr/bin/pdf2txt
[diff "doc"]
    binary = true
    textconv = /usr/bin/catdoc
[diff "docx"]
    binary = true
    textconv = /usr/bin/docx2txt

Das Pro Git-Buch enthält ein gutes Kapitel zu diesem Thema: 8.2 Anpassen von Git-Git-Attributen

1615903
quelle
2
es funktioniert nicht für mich unter Windows 7. Ich habe die Catdoc-Version für Windows von hier heruntergeladen : blog.brush.co.nz/2009/09/catdoc-windows, als gitconfig und Attribute wie oben beschrieben zu bearbeiten. aber ich bekomme immer noch: diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binary Dateien a / src /.../ test.xls und b / src /.../ test.xls unterscheiden sich GIT-Version: 1.7.6.msysgit.1
Katrin
Speichert es das Dokument immer noch als Dokumentdatei oder als Textdatei? Wie stellen Sie das Dokument wieder her, wenn es sich um eine Textdatei handelt?
CMCDragonkai
@CMCDragonkai Dies hat keine Auswirkung auf die Speicherung der Datei, nur die Ausgabe des Befehls diff ist betroffen.
1615903
1
Es wird also immer noch die gesamte Datei gespeichert, nicht die Unterschiede?
CMCDragonkai
3
Betreff: xls2txt: Sehr ungern, ein Closed-Source-Tool von einer polnischen Website zu installieren. Das könnte dasselbe sein? github.com/hroptatyr/xls2txt Keine README obwohl ...
jcollum
22

Ich habe in den letzten Tagen mit genau diesem Problem zu kämpfen und ein kleines .NET-Dienstprogramm geschrieben, um Excel-Dateien so zu extrahieren und zu normalisieren, dass sie in der Quellcodeverwaltung viel einfacher zu speichern sind. Ich habe die ausführbare Datei hier veröffentlicht:

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

..und die Quelle hier:

https://bitbucket.org/htilabs/ooxmlunpack

Wenn es Interesse gibt, bin ich froh, dies konfigurierbarer zu machen, aber im Moment sollten Sie die ausführbare Datei in einem Ordner (z. B. dem Stammverzeichnis Ihres Quell-Repositorys) ablegen. Wenn Sie sie ausführen, wird sie:

  • Durchsuchen Sie den Ordner und seine Unterordner nach XLSX- und XLSM-Dateien
  • Nehmen Sie eine Kopie der Datei als * .orig.
  • Entpacken Sie jede Datei und komprimieren Sie sie ohne Komprimierung erneut.
  • Drucken Sie alle Dateien im Archiv, die gültiges XML sind, hübsch aus.
  • Löschen Sie die Datei calcchain.xml aus dem Archiv (da sie sich stark ändert und den Inhalt der Datei nicht beeinflusst).
  • Inline alle unformatierten Textwerte (andernfalls werden diese in einer Nachschlagetabelle gespeichert, was zu großen Änderungen im internen XML führt, wenn auch nur eine einzelne Zelle geändert wird).
  • Löschen Sie die Werte aus allen Zellen, die Formeln enthalten (da diese nur beim nächsten Öffnen des Blattes berechnet werden können).
  • Erstellen Sie einen Unterordner * .extracted, der den extrahierten Inhalt des Zip-Archivs enthält.

Natürlich sind nicht alle diese Dinge notwendig, aber das Endergebnis ist eine Tabellenkalkulationsdatei, die weiterhin in Excel geöffnet wird, die jedoch einer unterschiedlichen und inkrementellen Komprimierung viel besser zugänglich ist. Durch das Speichern der extrahierten Dateien wird im Versionsverlauf viel deutlicher, welche Änderungen in den einzelnen Versionen vorgenommen wurden.

Wenn da draußen Appetit besteht, bin ich froh, das Tool konfigurierbarer zu machen, da ich denke, dass nicht jeder den Inhalt extrahieren oder möglicherweise die Werte aus Formelzellen entfernen möchte, aber beide sind im Moment sehr nützlich für mich.

In Tests wurde eine 2-MB-Tabelle auf 21 MB entpackt, aber dann konnte ich fünf Versionen mit jeweils kleinen Änderungen in einer 1,9-MB-Mercurial-Datendatei speichern und die Unterschiede zwischen den Versionen mithilfe von Beyond Compare in effektiv visualisieren Textmodus.

NB: Obwohl ich Mercurial verwende, habe ich diese Frage bei der Recherche meiner Lösung gelesen und es gibt nichts Mercurial-spezifisches an der Lösung, das für Git oder jedes andere VCS gut funktionieren sollte.

Jon G.
quelle
Ich habe es tatsächlich nicht versucht, aber ich gehe davon aus, dass es - wenn Sie es versuchen, wäre es toll zu wissen
Jon G
@JonG Ich kann es nicht mit LibreOffice zum Laufen bringen und es gibt keine Registerkarte "Probleme" im Bitbucket-Repository. Ich würde gerne einen Beitrag leisten, wenn wir ein Problem in Gang bringen könnten!
Christian Droulers
Hi @ christian-droulers, ich habe das Problem auf dem Repo aktiviert. Fühlen Sie sich frei, dort etwas hinzuzufügen!
Jon G
@JonG Das sieht gut aus, ein flexibler Versionsverlauf kann in vielen dokumentbezogenen Szenarien sehr nützlich sein! Aber warum ist es wichtig, dass die Datei in Excel geöffnet wird? Können Sie nicht einfach die .orig-Datei verwenden? Und glauben Sie, dass die Normalisierungen konfigurierbar / dynamisch sein können, sodass der Code auch für docx / pptx verwendet werden kann?
Jørgen Tvedt
10

Tante empfahl einen sehr einfachen Ansatz zum Verwalten von ZIP-basierten Dateiformaten in Git :

Öffnen Sie Ihre ~ / .gitconfig-Datei (erstellen, falls noch nicht vorhanden) und fügen Sie die folgende Zeilengruppe hinzu:

[diff "zip"]
textconv = unzip -c -a
Roberto Cabellon
quelle
3
Anschließend erweiterte Peng Xu die Lösung und ermöglichte die Versionierung von zip-basierten Dateien mithilfe von Filtern. Außerdem wurden nur Diff-Änderungen angezeigt
Roberto Cabellon
4

Verwenden Sie die offene Dokumenterweiterung .fods . Es ist ein einfaches, unkomprimiertes XML-Markup-Format, das sowohl Excel als auch LibreOffice öffnen können, und die Unterschiede sehen gut aus.

Thouliha
quelle
2

Wir haben eine Open-Source-Git-Befehlszeilenerweiterung für Excel-Arbeitsmappen erstellt: https://www.xltrail.com/git-xltrail .

Kurz gesagt, das Hauptmerkmal ist, dass es macht git diff alle Arbeitsmappen-Dateiformate bearbeitet werden, sodass der Unterschied zum VBA-Inhalt der Arbeitsmappe angezeigt wird (irgendwann wird dies auch für den Inhalt der Arbeitsblätter funktionieren).

Es ist noch früh, aber es könnte helfen.

Björn Stiel
quelle
und über zwei Jahre später wird immer noch nur VBA verarbeitet, während viele der anderen Lösungen die gesamte Tabelle verarbeiten. Ich habe mich seit über einem Jahrzehnt nicht mehr um den VBA-Inhalt einer Tabelle gekümmert (oder genauer gesagt, ich habe aktiv versucht, keine zu haben ...).
Auspex
1

Wie im Kommentar einer anderen Antwort erwähnt, sind XLSX-Dateien nur XML.

Um zum XML-Verzeichnis zu gelangen (das git-able ist), müssen Sie die XLSX-Datei in ein Verzeichnis "entpacken". Eine schnelle Möglichkeit, dies unter Windows zu sehen, besteht darin, die Datei <Dateiname> .xlsx in <Dateiname> .zip umzubenennen. Der innere Inhalt wird angezeigt. Ich würde dies zusammen mit der Binärdatei speichern, damit Sie beim Auschecken keine weiteren Schritte ausführen müssen, um das Dokument in Excel zu öffnen.

g19fanatic
quelle
1
Zumindest das von mir verwendete Zip-Tool (7-zip) ermöglicht das Öffnen / Extrahieren aller Dateien - Sie müssen sie nicht umbenennen.
Onur
1

Dieses Excel-Dienstprogramm funktioniert sehr gut für mich:

Versionskontrolle für Excel

Es ist ein recht einfaches Versionierungswerkzeug für Arbeitsmappen und VBA-Makros. Sobald Sie eine Version festgeschrieben haben, wird diese in einem Git-Repository auf Ihrem PC gespeichert. Ich habe es nie wieder versucht. SQL-Schemadateien, aber ich bin sicher, es gibt einen Ausweg.

eriklind
quelle
Dies ist das einzige Tool, das ich gefunden habe und das mit Modulen funktioniert, die in XLSM-Dateien eingebettet sind. Die einzige mir bekannte Alternative besteht darin, ein Makro auszuführen, um jedes Modul in eine eigene Datei zu exportieren, sie festzuschreiben und dann ein Makro auszuführen, um sie alle nach dem Ziehen und Zusammenführen erneut zu importieren. xltrailist viel einfacher als das.
Michael Hoffmann
0

Mein Ansatz mit Excel-Dateien ähnelt dem von Jon, aber anstatt mit den rohen Excel-Textdaten zu arbeiten, exportiere ich in benutzerfreundlichere Formate.

Hier ist das Tool, das ich benutze: https://github.com/stenci/ExcelToGit/tree/master

Sie müssen lediglich die XLSM-Datei herunterladen (klicken Sie auf den Link View Raw auf dieser Seite ). Vergessen Sie nicht, die Excel-Einstellung wie in der Readme- beschrieben zu überprüfen. Sie können auch den Code zum Exportieren von SQL-Daten in Textdateien hinzufügen.

Die Arbeitsmappe ist sowohl ein Konverter von binärem Excel in Textdateien als auch ein Starter der Windows Git-Tools und kann auch mit nicht Excel-bezogenen Projekten verwendet werden.

Meine Arbeitsversion ist mit Dutzenden von Excel-Arbeitsmappen konfiguriert. Ich benutze die Datei auch, um Git-GUI für Nicht-Excel-Projekte zu öffnen, indem ich einfach den Git-Ordner von Hand hinzufüge.

stenci
quelle