Come eseguire un controllo della versione del documento migliore su file Excel e file di schema SQL

Sono responsabile di diversi file Excel e file di schema SQL. Come dovrei eseguire un controllo della versione del documento migliore su questi file? Ho bisogno di conoscere la parte modificata (parte diversa) in questi file e conservare tutte le versioni per riferimento. Attualmente sto aggiungendo il timestamp sul nome del file, ma ho trovato che sembrava inefficiente.

Esiste un modo o una buona pratica per migliorare il controllo della versione del documento?

A proposito, i redattori mi mandano i file via email.

Dal momento che hai codificato la tua domanda con git presumo tu stia chiedendo di git per questo.

Bene, i dump SQL sono normali file di testo, quindi ha perfettamente senso seguirli con git . Basta creare un repository e conservarli in esso. Quando ottieni una nuova versione di un file, semplicemente la sovrascrivi e la esegui, git tutto per te e potrai vedere le date di modifica, eseguire il checkout di versioni specifiche di questo file e confrontare diverse versioni.

Lo stesso vale per .xlsx se li si decomprime. .xlsx file .xlsx sono cartelle compresse di file XML (vedi Come assemblare correttamente un file xlsx valido dai suoi componenti secondari interni? ). Git li vedrà come binari a meno che non vengano decompressi. È ansible decomprimere il file .xlsx e tenere traccia delle modifiche ai singoli file XML all’interno dell’archivio.

Puoi farlo anche con i file .xls , ma il problema è che il formato .xls è binario, quindi non puoi ottenere differenze significative da esso. Sarai comunque in grado di visualizzare la cronologia delle modifiche e di eseguire il checkout di versioni specifiche.

La risposta che ho scritto qui può essere applicata in questo caso. Uno strumento chiamato xls2txt può fornire un output leggibile dai file xls. Quindi, in breve, dovresti inserire questo nel tuo file .gitattributes:

 *.xls diff=xls 

E in .git / config:

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

Certo, sono sicuro che puoi trovare strumenti simili anche per altri tipi di file, rendendo git diff uno strumento molto utile per i documenti d’ufficio. Questo è ciò che attualmente ho nel mio .gitconfig globale:

 [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 

Il libro Pro Git ha un buon capitolo sull’argomento: http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Binary-Files

Sono stato alle prese con questo problema esatto negli ultimi giorni e ho scritto una piccola utility .NET per estrarre e normalizzare i file di Excel in modo tale che siano molto più facili da memorizzare nel controllo del codice sorgente. Ho pubblicato l’eseguibile qui:

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

..e la fonte qui:

https://bitbucket.org/htilabs/ooxmlunpack

Se c’è qualche interesse sono felice di renderlo più configurabile, ma al momento, dovresti mettere l’eseguibile in una cartella (es. La radice del tuo repository sorgente) e quando lo esegui, lo farà:

  • Analizza la cartella e le relative sottocartelle per qualsiasi file .xlsx e .xlsm
  • Prendi una copia del file come * .orig
  • Decomprimere ogni file e ricollegarlo senza compressione
  • Pretty-stampa tutti i file nell’archivio che sono XML validi
  • Elimina il file calcchain.xml dall’archivio (poiché cambia molto e non influisce sul contenuto del file)
  • Inline tutti i valori di testo non formattato (altrimenti vengono mantenuti in una tabella di ricerca che causa grandi cambiamenti nell’XML interno se anche una singola cella viene modificata)
  • Elimina i valori da qualsiasi cella che contiene formule (poiché possono essere calcolate solo quando il foglio viene aperto successivamente)
  • Crea una sottocartella * .estratta, contenente il contenuto dell’archivio zip estratto

Chiaramente non tutte queste cose sono necessarie, ma il risultato finale è un file di foglio di calcolo che verrà comunque aperto in Excel ma che è molto più suscettibile alla compressione differenziale e incrementale. Inoltre, anche la memorizzazione dei file estratti rende molto più evidente nella cronologia delle versioni quali modifiche sono state applicate in ciascuna versione.

Se c’è appetito là fuori, sono felice di rendere lo strumento più configurabile dal momento che immagino che non tutti vorranno il contenuto estratto, o forse i valori rimossi dalle celle della formula, ma sono entrambi molto utili per me al momento.

Nei test, un foglio di calcolo di 2MB “scompatta” a 21MB, ma poi sono riuscito a memorizzare cinque versioni di esso con piccole modifiche tra ciascuna, in un file di dati mercurial da 1,9 MB e visualizzare le differenze tra le versioni in modo efficace utilizzando Beyond Compare in modalità testo.

nb anche se sto usando Mercurial, ho letto questa domanda mentre ricercavo la mia soluzione e non c’è nulla di specifico nella soluzione, dovresti lavorare bene per git o altri vcs

Tante ha reso molto semplice la gestione dei formati di file basati su ZIP in git :

Apri il tuo file ~ / .gitconfig (crea se non esiste già) e aggiungi la seguente stanza:

[diff “zip”]

 textconv = unzip -c -a 

Come menzionato nel commento di un’altra risposta, i file .xlsx sono solo XML.

Per arrivare alla directory XML (che è git -able), devi “decomprimere” il file .xlsx in una directory. Un modo rapido per vedere questo su Windows è rinominare il file .xlsx in .zip, e vedrai il contenuto interno. Lo memorizzerei insieme al file binario in modo che al momento del checkout non sia necessario eseguire altri passaggi per aprire il documento in Excel.

Il mio approccio con i file Excel è simile a quello di Jon, ma invece di lavorare con i dati di testo Excel grezzi esporto in formati più amichevoli.

Ecco lo strumento che utilizzo: https://github.com/stenci/ExcelToGit/tree/master

Tutto ciò che serve è scaricare il file .xlsm (fare clic sul collegamento Visualizza raw in questa pagina ). Non dimenticare di controllare le impostazioni di Excel come descritto nel readme. È inoltre ansible aggiungere il codice per esportare i dati SQL in file di testo.

La cartella di lavoro è sia un convertitore da Excel binario a file di testo e un programma di avvio degli strumenti di Git di Windows, e può essere utilizzato anche con progetti non correlati a Excel.

La mia versione funzionante è configurata con dozzine di cartelle di lavoro di Excel. Io uso il file anche per aprire Git-gui per progetti non di Excel, aggiungendo semplicemente la cartella git a mano.

Questa utilità di Excel funziona molto bene per me:

Controllo versione per Excel

È uno strumento per il controllo delle versioni abbastanza semplice per cartelle di lavoro e macro VBA. Dopo aver eseguito il commit di una versione, questa viene salvata nel repository Git sul PC. Mai provato. File dello schema SQL, ma sono sicuro che c’è un modo per aggirare.

Abbiamo creato un’estensione della riga di comando Git open source per le cartelle di lavoro di Excel: https://www.xltrail.com/git-xltrail .

In poche parole, la caratteristica principale è che rende git diff funziona su tutti i formati di file della cartella di lavoro in modo che mostri il diff sul contenuto VBA della cartella di lavoro (a un certo punto, faremo questo lavoro anche per il contenuto dei fogli di lavoro).

È ancora presto, ma potrebbe essere d’aiuto.

Usa l’estensione di documento aperta .fods , è un semplice markup xml non compresso che sia excel che libreoffice possono aprire, e le differenze appariranno buone.