Comment effectuer un meilleur contrôle de version de document sur les fichiers Excel et les fichiers de schéma SQL


99

Je suis en charge de plusieurs fichiers Excel et fichiers de schéma SQL. Comment dois-je effectuer un meilleur contrôle de version de document sur ces fichiers?

J'ai besoin de connaître la partie modifiée (partie différente) dans ces fichiers et de conserver toutes les versions pour référence. Actuellement, j'ajoute l'horodatage au nom du fichier, mais j'ai trouvé que cela semblait inefficace.

Existe-t-il un moyen ou une bonne pratique d'améliorer le contrôle des versions des documents?

Au fait, les éditeurs m'envoient les fichiers par e-mail.


5
Je peux convertir ces fichiers Excel en fichiers CSV, puis les suivre à l'aide de git afin de pouvoir utiliser diff pour voir la modification. Existe-t-il d'autres bonnes pratiques?
Marcus Thornton

Voyez les autres réponses, qui je pense sont meilleures que celle que vous avez acceptée.
nealmcb

Réponses:


45

Puisque vous avez tagué votre question avec Je suppose que vous posez des questions sur l'utilisation de Git pour cela.

Eh bien, les vidages SQL sont des fichiers texte normaux, il est donc parfaitement logique de les suivre avec Git. Créez simplement un référentiel et stockez-les dedans. Lorsque vous obtenez une nouvelle version d'un fichier, écrasez-le simplement et validez, Git déterminera tout pour vous, et vous pourrez voir les dates de modification, extraire des versions spécifiques de ce fichier et comparer différentes versions.

La même chose est vraie .xlsxsi vous les décompressez. .xlsxLes fichiers sont des répertoires compressés de fichiers XML (voir Comment assembler correctement un fichier xlsx valide à partir de ses sous-composants internes? ). Git les verra comme binaires à moins d'être décompressés. Il est possible de décompresser .xlsxet de suivre les modifications apportées aux fichiers XML individuels à l'intérieur de l'archive.

Vous pouvez également le faire avec des .xlsfichiers, mais le problème ici est que le .xlsformat est binaire, vous ne pouvez donc pas en obtenir des différences significatives. Mais vous pourrez toujours voir l'historique des modifications et extraire des versions spécifiques.


4
Oui, je sais git. Je pense que git est bon pour suivre les schémas SQL. Quant aux fichiers Excel (.xlsx et .xls), comme ce sont des fichiers binaires, leur suivi à l'aide de git ne peut pas me montrer ce qui a été modifié en perspective humaine. C'est ce que je déroute.
Marcus Thornton

2
@MarcusThornton .xlsxest XML, donc devrait fonctionner correctement . En général, il n'existe aucun moyen de comparer facilement deux .xlsfichiers. Vous pourriez probablement ajouter un hook pré-commit qui en mettra un à .csvproximité et vous pourrez les différencier.
kirelagin

86

La réponse que j'ai écrite ici peut être appliquée dans ce cas. Un outil appelé xls2txt peut fournir une sortie lisible par l'homme à partir de fichiers .xls. Donc, en bref, vous devriez mettre ceci dans votre fichier .gitattributes:

*.xls diff=xls

Et dans le .git / config:

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

Bien sûr, je suis sûr que vous pouvez également trouver des outils similaires pour d'autres types de fichiers, ce qui en fait git diffun outil très utile pour les documents bureautiques. C'est ce que j'ai actuellement dans mon .gitconfig global:

[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

Le livre Pro Git a un bon chapitre sur le sujet: 8.2 Personnalisation de Git - Attributs Git


2
cela ne fonctionne pas pour moi sur windows7. J'ai téléchargé la version catdoc pour Windows à partir d'ici: blog.brush.co.nz/2009/09/catdoc-windows que de modifier gitconfig et les attributs comme décrit ci-dessus. mais j'obtiens toujours: diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binaire les fichiers a / src /.../ test.xls et b / src /.../ test.xls diffèrent de la version GIT: 1.7.6.msysgit.1
katrin

Stocke-t-il toujours le document sous forme de fichier doc ou de fichier texte? S'il s'agit d'un fichier texte, comment récupérer le document?
CMCDragonkai

@CMCDragonkai Cela n'a aucun effet sur la façon dont le fichier est stocké, seule la sortie de la commande diff est affectée.
1615903

1
Donc, il stocke toujours le fichier entier, pas les diffs?
CMCDragonkai

3
Re: xls2txt: extrêmement réticent à installer un outil source fermée à partir d'un site Web polonais. Cela pourrait être la même chose? github.com/hroptatyr/xls2txt Pas de README cependant ...
jcollum

22

Je me débat avec ce problème exact depuis quelques jours et j'ai écrit un petit utilitaire .NET pour extraire et normaliser les fichiers Excel de manière à ce qu'ils soient beaucoup plus faciles à stocker dans le contrôle de code source. J'ai publié l'exécutable ici:

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

..et la source ici:

https://bitbucket.org/htilabs/ooxmlunpack

S'il y a un intérêt, je suis heureux de rendre cela plus configurable, mais pour le moment, vous devriez placer l'exécutable dans un dossier (par exemple la racine de votre référentiel source) et lorsque vous l'exécuterez, il:

  • Analysez le dossier et ses sous-dossiers à la recherche de fichiers .xlsx et .xlsm
  • Prenez une copie du fichier au format * .orig.
  • Décompressez chaque fichier et re-zip sans compression.
  • Imprimez joliment tous les fichiers de l'archive qui sont du XML valide.
  • Supprimez le fichier calcchain.xml de l'archive (car il change beaucoup et n'affecte pas le contenu du fichier).
  • Inline toutes les valeurs de texte non formatées (sinon, elles sont conservées dans une table de consultation, ce qui entraîne de grands changements dans le XML interne si même une seule cellule est modifiée).
  • Supprimez les valeurs de toutes les cellules contenant des formules (car elles peuvent simplement être calculées lors de la prochaine ouverture de la feuille).
  • Créez un sous-dossier * .extrait, contenant le contenu de l'archive zip extraite.

Il est clair que toutes ces choses ne sont pas nécessaires, mais le résultat final est un fichier de feuille de calcul qui sera toujours ouvert dans Excel, mais qui se prête beaucoup mieux à une compression différente et incrémentielle. De plus, le stockage des fichiers extraits rend beaucoup plus évident dans l'historique des versions les changements qui ont été appliqués dans chaque version.

S'il y a un quelconque appétit, je suis heureux de rendre l'outil plus configurable car je suppose que tout le monde ne voudra pas que le contenu soit extrait, ou peut-être les valeurs supprimées des cellules de formule, mais ces deux éléments me sont très utiles pour le moment.

Lors des tests, une feuille de calcul de 2 Mo `` décompresse '' à 21 Mo, mais j'ai ensuite pu stocker cinq versions de celle-ci avec de petites modifications entre chacune, dans un fichier de données Mercurial de 1,9 Mo, et visualiser les différences entre les versions efficacement en utilisant Beyond Compare dans mode texte.

NB: bien que j'utilise Mercurial, j'ai lu cette question en recherchant ma solution et il n'y a rien de spécifique à Mercurial dans la solution, cela devrait fonctionner correctement pour Git ou tout autre VCS.


En fait, je n'ai pas essayé, mais je suppose que ce serait - si vous faites un essai, ce serait génial de savoir
Jon G

@JonG Je ne peux pas le faire fonctionner avec LibreOffice et il n'y a pas d'onglet Problèmes dans le référentiel bitbucket. J'adorerais contribuer si nous pouvions lancer un problème!
Christian Droulers

Salut @ christian-droulers, j'ai activé le problème sur le repo, n'hésitez pas à y ajouter quelque chose!
Jon G

@JonG Cela a l'air génial, avoir un historique des versions différent pourrait être vraiment utile dans de nombreux scénarios liés aux documents! Mais pourquoi est-il important que le fichier s'ouvre dans Excel? Vous ne pouvez pas simplement utiliser le fichier .orig? Et pensez-vous que les normalisations peuvent être configurables / dynamiques afin que le code puisse également être utilisé pour docx / pptx?
Jørgen Tvedt

10

Tante a recommandé une approche très simple dans la gestion des formats de fichiers ZIP dans Git :

Ouvrez votre fichier ~ / .gitconfig (créez s'il n'existe pas déjà) et ajoutez la strophe suivante:

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

3
puis, Peng Xu a étendu la solution, permettant de contrôler les versions des fichiers zip à l'aide du filtre, en plus de ne visualiser que les changements de diff: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon

4

Utilisez l'extension de document ouvert .fods. C'est un format de balisage XML simple et non compressé que Excel et LibreOffice peuvent ouvrir, et les différences auront l'air bien.


2

Nous avons créé une extension de ligne de commande Git open source pour les classeurs Excel: https://www.xltrail.com/git-xltrail .

En un mot, la caractéristique principale est qu'il rend git diff travailler sur tous les formats de fichier de classeur afin d'afficher la différence sur le contenu VBA du classeur (à un moment donné, nous ferons également ce travail pour le contenu des feuilles de calcul).

C'est encore tôt, mais cela pourrait aider.


et plus de deux ans plus tard, il ne gère toujours que VBA, tandis que de nombreuses autres solutions gèrent la feuille de calcul entière. Je ne me suis pas vraiment soucié du contenu VBA d'une feuille de calcul depuis plus d'une décennie (ou plus correctement, j'ai activement essayé d'éviter d'en avoir ...).
Auspex

1

Comme mentionné dans le commentaire d'une autre réponse, les fichiers .xlsx ne sont que du XML.

Pour accéder au répertoire XML (qui est git-able), vous devez "décompresser" le fichier .xlsx dans un répertoire. Un moyen rapide de voir cela sous Windows est de renommer le fichier <filename> .xlsx en <filename> .zip, et vous verrez le contenu interne. Je stockerais cela avec le binaire afin que lorsque vous passez à la caisse, vous n'ayez pas à faire d'autres étapes pour ouvrir le document dans Excel.


1
Au moins, l'outil zip que j'utilise (7-zip) permet d'ouvrir / extraire tous les fichiers - vous n'avez pas à les renommer.
Onur

1

Cet utilitaire Excel fonctionne très bien pour moi:

Contrôle de version pour Excel

Il s'agit d'un outil de gestion des versions assez simple pour les classeurs et les macros VBA. Une fois que vous avez validé une version, elle est enregistrée dans un référentiel Git sur votre PC. Je ne l'ai jamais essayé. Fichiers de schéma SQL, mais je suis sûr qu'il existe un moyen de contourner.


C'est le seul outil que j'ai trouvé qui fonctionne avec des modules intégrés dans des fichiers .xlsm. La seule alternative que je connaisse est d'exécuter une macro pour exporter chaque module vers son propre fichier, de les valider, puis d'exécuter une macro pour les importer à nouveau après l'extraction et la fusion. xltrailc'est beaucoup plus facile que ça.
Michael Hoffmann

0

Mon approche avec les fichiers Excel est similaire à celle de Jon, mais au lieu de travailler avec les données de texte Excel brutes, j'exporte vers des formats plus conviviaux.

Voici l'outil que j'utilise: https://github.com/stenci/ExcelToGit/tree/master

Tout ce dont vous avez besoin est de télécharger le fichier .xlsm (cliquez sur le lien Afficher brut sur cette page .) N'oubliez pas de vérifier le paramètre Excel comme décrit dans le readme. Vous pouvez également ajouter le code pour exporter des données SQL vers des fichiers texte.

Le classeur est à la fois un convertisseur d'Excel binaire en fichiers texte et un lanceur des outils Windows Git, et il peut également être utilisé avec des projets non liés à Excel.

Ma version de travail est configurée avec des dizaines de classeurs Excel. J'utilise également le fichier pour ouvrir Git-gui pour les projets non Excel, en ajoutant simplement le dossier git à la main.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.