Come eseguire un migliore controllo della versione del documento sui file Excel e sui file dello schema SQL


98

Sono responsabile di diversi file Excel e file di schema SQL. Come devo eseguire un migliore controllo della versione del documento su questi file?

Ho bisogno di conoscere la parte modificata (parte diversa) in questi file e mantenere tutte le versioni per riferimento. Attualmente sto aggiungendo il timestamp al nome del file, ma ho scoperto che sembrava inefficiente.

C'è un modo o una buona pratica per migliorare il controllo della versione del documento?

A proposito, gli editori mi inviano i file via e-mail.


5
Posso convertire questi file Excel in file CSV e quindi monitorarli utilizzando git in modo da poter utilizzare diff per vedere la modifica. C'è qualche altra buona pratica?
Marcus Thornton

Guarda le altre risposte, che penso siano migliori di quella che hai accettato.
nealmcb

Risposte:


45

Dato che hai contrassegnato la tua domanda con Presumo tu stia chiedendo informazioni sull'utilizzo di Git per questo.

Bene, i dump SQL sono normali file di testo quindi ha perfettamente senso rintracciarli con Git. Basta creare un repository e archiviarli al suo interno. Quando si ottiene una nuova versione di un file, è sufficiente sovrascriverla e eseguire il commit, Git capirà tutto per te e sarai in grado di vedere le date di modifica, controllare versioni specifiche di questo file e confrontare versioni diverse.

Lo stesso vale per .xlsxse li decomprimi. .xlsxi file sono directory compresse di file XML (vedere Come assemblare correttamente un file xlsx valido dai suoi sottocomponenti interni? ). Git li visualizzerà come binari a meno che non vengano decompressi. È possibile decomprimere .xlsxe tenere traccia delle modifiche ai singoli file XML all'interno dell'archivio.

Puoi anche farlo con i .xlsfile, ma il problema qui è che il .xlsformato è binario, quindi non puoi ottenere differenze significative da esso. Ma sarai comunque in grado di vedere la cronologia delle modifiche e il checkout di versioni specifiche.


4
Sì, lo so git. Penso che git sia utile quando si tracciano schemi SQL. Per quanto riguarda i file Excel (.xlsx e .xls), poiché sono file binari, tracciarli utilizzando git non può mostrarmi cosa è stato modificato dalla prospettiva umana. Questo è ciò che sto confondendo.
Marcus Thornton

2
@ MarcusThornton .xlsxè XML, quindi dovrebbe funzionare bene. In generale, non è possibile confrontare facilmente due .xlsfile. Probabilmente potresti aggiungere un hook pre-commit che lo metterà .csvvicino e sarai in grado di diffonderli.
kirelagin

86

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

*.xls diff=xls

E nel .git / config:

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

Naturalmente, sono sicuro che puoi trovare strumenti simili anche per altri tipi di file, rendendolo git diffuno strumento molto utile per i documenti di Office. Questo è quello che ho attualmente 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: 8.2 Personalizzare Git - Attributi Git


2
non funziona per me su windows7. Ho scaricato la versione catdoc per Windows da qui: blog.brush.co.nz/2009/09/catdoc-windows quindi modificare gitconfig e gli attributi come descritto sopra. ma ottengo ancora: diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binario file a / src /.../ test.xls eb / src /.../ test.xls differiscono versione GIT: 1.7.6.msysgit.1
katrin

Memorizza ancora il documento come file doc o come file di testo? Se è un file di testo, come si ripristina il documento?
CMCDragonkai

@CMCDragonkai Questo non ha alcun effetto su come il file viene memorizzato, solo l'output del comando diff è influenzato.
1615903

1
Quindi sta ancora archiviando l'intero file, non le differenze?
CMCDragonkai

3
Ri: xls2txt: estremamente riluttante a installare uno strumento closed-source da un sito web polacco. Potrebbe essere la stessa cosa? github.com/hroptatyr/xls2txt Nessun README però ...
jcollum

22

Ho lottato con questo problema esatto negli ultimi giorni e ho scritto una piccola utility .NET per estrarre e normalizzare i file 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à:

  • Scansiona la cartella e le sue sottocartelle per eventuali file .xlsx e .xlsm
  • Prendi una copia del file come * .orig.
  • Decomprimere ogni file e comprimerlo nuovamente senza compressione.
  • Stampa abbastanza qualsiasi file nell'archivio che sia XML valido.
  • Elimina il file calcchain.xml dall'archivio (poiché cambia molto e non influisce sul contenuto del file).
  • Inline tutti i valori di testo non formattati (altrimenti questi vengono conservati in una tabella di ricerca che causa grandi cambiamenti nell'XML interno se viene modificata anche una singola cella).
  • Elimina i valori da tutte le celle che contengono formule (poiché possono essere calcolate solo alla successiva apertura del foglio).
  • Crea una sottocartella * .extracted, 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 di compressione differenziale e incrementale. Inoltre, la memorizzazione anche dei file estratti rende molto più ovvio 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 poiché immagino che non tutti vorranno i contenuti estratti, o forse i valori rimossi dalle celle della formula, ma questi sono entrambi molto utili per me al momento.

Nei test, un foglio di calcolo da 2 MB 'scompatta' a 21 MB, ma poi sono stato in grado di 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: sebbene io stia usando Mercurial, ho letto questa domanda durante la ricerca della mia soluzione e non c'è niente di specifico di Mercurial sulla soluzione, dovrebbe funzionare bene per Git o qualsiasi altro VCS.


In realtà non ho provato, ma presumo che sarebbe - se ci provi sarebbe bello saperlo
Jon G

@ JonG Non riesco a farlo funzionare con LibreOffice e non c'è la scheda Problemi nel repository di bitbucket. Mi piacerebbe contribuire se potessimo risolvere un problema!
Christian Droulers

Ciao @ christian-droulers, ho abilitato il problema sul Repo, sentiti libero di aggiungere qualcosa lì!
Jon G

@JonG Sembra fantastico, avere una cronologia delle versioni variabile potrebbe essere davvero utile in molti scenari relativi ai documenti! Ma perché è importante che il file si apra in Excel? Non puoi semplicemente usare il file .orig? E pensi che le normalizzazioni possano essere configurabili / dinamiche in modo che il codice possa essere utilizzato anche per docx / pptx?
Jørgen Tvedt

10

Tante ha consigliato un approccio molto semplice nella gestione dei formati di file basati su ZIP in Git :

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

[diff "zip"]
textconv = unzip -c -a

3
quindi, Peng Xu ha esteso la soluzione, consentendo il controllo delle versioni dei file basati su zip utilizzando il filtro, oltre a visualizzare solo le modifiche alle differenze: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon

4

Usa l'estensione del documento aperto .fods. È un semplice formato di markup XML non compresso che sia Excel che LibreOffice possono aprire e le differenze avranno un bell'aspetto.


2

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 fa git diff funziona su qualsiasi formato di file della cartella di lavoro in modo che mostri la differenza sul contenuto VBA della cartella di lavoro (a un certo punto, lo faremo funzionare anche per il contenuto dei fogli di lavoro).

È ancora agli inizi, ma potrebbe aiutare.


e più di due anni dopo gestisce ancora solo VBA, mentre molte delle altre soluzioni gestiscono l'intero foglio di calcolo. In realtà non mi interessa il contenuto VBA di un foglio di calcolo da oltre un decennio (o più correttamente, ho cercato attivamente di evitare di averne ...).
Auspex

1

Come accennato nel commento di un'altra risposta, i file .xlsx sono solo XML.

Per accedere alla directory XML (che è git-able), devi "decomprimere" il file .xlsx in una directory. Un modo rapido per vederlo su Windows è rinominare il file <nomefile> .xlsx in <nomefile> .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.


1
Almeno lo strumento zip che uso (7-zip) consente di aprire / estrarre tutti i file - non è necessario rinominarli.
Onur

1

Questa utility di Excel funziona molto bene per me:

Controllo della versione per Excel

È uno strumento di controllo delle versioni abbastanza semplice per cartelle di lavoro e macro VBA. Dopo aver eseguito il commit di una versione, questa viene salvata in un repository Git sul tuo PC. Non l'ho mai provato. File di schema SQL, ma sono sicuro che ci sia un modo per aggirare.


Questo è l'unico strumento che ho trovato che funziona con i moduli incorporati nei file .xlsm. L'unica alternativa che conosco è eseguire una macro per esportare ogni modulo nel proprio file, eseguirne il commit e quindi eseguire una macro per importarli di nuovo dopo averli estratti e uniti. xltrailè molto più facile di così.
Michael Hoffmann

0

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 file Leggimi. È inoltre possibile 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 che un lanciatore degli strumenti Git di Windows, e può essere utilizzata anche con progetti non correlati a Excel.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.