webentwicklung-frage-antwort-db.com.de

So führen Sie eine bessere Dokumentversionskontrolle für Excel- und SQL-Schemadateien durch

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

Ich muss das modifizierte Teil (anderes Teil) in diesen Dateien kennen und alle Versionen als Referenz aufbewahren. Derzeit hänge ich den Zeitstempel an den Dateinamen an, fand ihn jedoch ineffizient.

Gibt es eine Möglichkeit oder eine bewährte Methode für eine bessere Versionskontrolle von Dokumenten?

Übrigens senden mir die Redakteure die Dateien per E-Mail.

94
Marcus Thornton

Da Sie Ihre Frage mit git markiert haben, gehen wir davon aus, dass Sie dazu Fragen zur Git-Nutzung haben.

Nun, SQL-Dumps sind normale Textdateien, daher ist es absolut sinnvoll, sie mit Git zu verfolgen. Erstellen Sie einfach ein Repository und speichern Sie sie darin. Wenn Sie eine neue Version einer Datei erhalten, überschreiben Sie sie einfach und bestätigen Sie sie. Git wird alles für Sie herausfinden und Sie werden in der Lage sein, Änderungsdaten zu sehen, bestimmte Versionen dieser Datei auszuchecken und verschiedene Versionen zu vergleichen.

Gleiches gilt für .xlsx wenn Sie sie dekomprimieren. .xlsx-Dateien sind komprimierte Verzeichnisse von XML-Dateien (Siehe Wie wird eine gültige xlsx-Datei aus ihren internen Unterkomponenten korrekt zusammengesetzt?). Git zeigt sie als Binärdateien an, sofern sie nicht dekomprimiert wurden. Es ist möglich, das .xlsx und verfolgen Sie die Änderungen an den einzelnen XML-Dateien im Archiv.

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

38
kirelagin

Die Antwort, die ich geschrieben habe hier kann in diesem Fall angewendet werden. Ein Tool mit dem Namen xls2txt kann eine lesbare Ausgabe 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

Natürlich können Sie ähnliche Tools auch für andere Dateitypen finden, indem Sie git diff ein sehr nützliches Tool für Office-Dokumente. Das habe ich aktuell 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 zum Thema: 8.2 Anpassen von Git - Git-Attributen

82
1615903

Ich habe in den letzten Tagen mit genau diesem Problem zu kämpfen und ein kleines .NET-Dienstprogramm geschrieben, mit dem Excel-Dateien so extrahiert und normalisiert werden können, dass sie in der Quellcodeverwaltung viel einfacher gespeichert werden können. 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 ein Interesse gibt, das ich gerne konfigurierbarer machen möchte, sollten Sie die ausführbare Datei im Moment in einem Ordner ablegen (z. B. im Stammverzeichnis Ihres Quell-Repositorys). Wenn Sie es ausführen, geschieht Folgendes:

  • Scannen 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 sich nicht auf den Inhalt der Datei auswirkt).
  • Fügen Sie alle unformatierten Textwerte ein (andernfalls werden diese in einer Nachschlagetabelle gespeichert, die große Änderungen im internen XML verursacht, wenn auch nur eine einzelne Zelle geändert wird).
  • Löschen Sie die Werte aus allen Zellen, die Formeln enthalten (da sie nur beim nächsten Öffnen des Arbeitsblatts berechnet werden können).
  • Erstellen Sie einen Unterordner * .extracted, der den Inhalt des extrahierten Zip-Archivs enthält.

Natürlich sind nicht alle diese Dinge notwendig, aber das Endergebnis ist eine Kalkulationstabellendatei, die immer noch in Excel geöffnet wird, die jedoch für unterschiedliche und inkrementelle Komprimierungen viel besser geeignet ist. Durch das Speichern der extrahierten Dateien wird auch im Versionsverlauf deutlich, welche Änderungen in den einzelnen Versionen vorgenommen wurden.

Wenn es Appetit gibt, bin ich froh, das Tool konfigurierbarer zu machen, da ich denke, dass nicht jeder die Inhalte extrahieren oder möglicherweise die Werte aus den Formelzellen entfernen möchte, aber diese beiden sind im Moment sehr nützlich für mich.

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

NB: Obwohl ich Mercurial verwende, habe ich diese Frage während der Recherche nach meiner Lösung gelesen und es gibt nichts Mercurial-spezifisches an der Lösung, sollte für Git oder ein anderes VCS gut funktionieren.

22
Jon G

Tante hat es sehr einfach gemacht in Zip-basierte Dateiformate in Git verwalten:

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

[diff "Zip"]

textconv = unzip -c -a
7

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 git diff Arbeiten Sie mit beliebigen Arbeitsmappendateiformaten, sodass der Unterschied im VBA-Inhalt der Arbeitsmappe angezeigt wird (irgendwann wird dies auch für den Inhalt der Arbeitsmappen gelten).

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

2
Bjoern Stiel

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 mir sicher, dass es einen Ausweg gibt.

1
eriklind

Wie im Kommentar einer anderen Antwort erwähnt, handelt es sich bei XLSX-Dateien nur um XML.

Um zum XML-Verzeichnis zu gelangen (das git- fähig 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. Sie sehen dann den inneren Inhalt. 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.

1
g19fanatic

Verwenden Sie die offene Dokumenterweiterung .fods. Es ist ein einfaches, unkomprimiertes XML-Markup-Format, das sowohl von Excel als auch von LibreOffice geöffnet werden kann, und die Unterschiede sehen gut aus.

1
thouliha

Mein Ansatz mit Excel-Dateien ist ähnlich wie bei Jon, aber anstatt mit den rohen Excel-Textdaten zu arbeiten, exportiere ich sie in freundlichere 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 diese Seite .) Vergessen Sie nicht, die Excel-Einstellung wie in der Readme-Datei 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. Sie kann auch mit Projekten verwendet werden, die nicht mit Excel zusammenhängen.

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.

0
stenci