web-dev-qa-db-fra.com

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

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

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

Existe-t-il un moyen ou une bonne pratique de mieux contrôler les versions de documents?

En passant, les éditeurs m'envoient les fichiers par courrier électronique.

94
Marcus Thornton

Puisque vous avez marqué votre question avec git , je suppose que vous vous interrogez sur l'utilisation de Git pour cela.

Les dumps SQL sont des fichiers texte normaux, il est donc logique de les suivre avec Git. Créez simplement un référentiel et stockez-les dans celui-ci. Lorsque vous obtenez une nouvelle version d'un fichier, écrasez-la et validez-la. Git trouvera tout pour vous. Vous pourrez voir les dates de modification, extraire des versions spécifiques de ce fichier et comparer différentes versions.

Il en va de même pour .xlsx Si vous les décompressez. Les fichiers .xlsx 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 le .xlsx Et de suivre les modifications apportées aux fichiers XML individuels à l'intérieur de l'archive.

Vous pouvez également le faire avec les fichiers .xls, Mais le problème ici est que le format .xls Est binaire, vous ne pouvez donc pas obtenir de différences significatives. Mais vous pourrez toujours voir l'historique des modifications et extraire des versions spécifiques.

38
kirelagin

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. 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 trouver des outils similaires pour d’autres types de fichiers, ce qui rend git diff un outil très utile pour les documents bureautiques. C'est ce que j'ai actuellement dans mon global .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

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

82
1615903

Je me bats avec ce problème 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). Lorsque vous l'exécuterez, il:

  • Analyser le dossier et ses sous-dossiers à la recherche de fichiers .xlsx et .xlsm
  • Prenez une copie du fichier en tant que * .orig.
  • Décompressez chaque fichier et recompressez-le 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 recherche, ce qui entraîne de gros 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 ne peuvent être calculées qu'à la prochaine ouverture de la feuille).
  • Créez un sous-dossier * .extracted contenant le contenu de l'archive Zip extraite.

Il est évident 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 est beaucoup plus propice à la compression différentielle et incrémentale. En outre, le stockage des fichiers extraits rend également beaucoup plus évident dans l'historique des versions les modifications apportées à chaque version.

S'il y a de l'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 cela m'est très utile pour le moment.

Lors des tests, une feuille de calcul de 2 Mo a été décompressée à 21 Mo, mais j’ai pu ensuite en stocker cinq versions avec de petites modifications entre elles, dans un fichier de données Mercurial de 1,9 Mo, et visualiser les différences entre les versions à l’aide de Au-delà de la comparaison en mode texte.

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

22
Jon G

Tante a rendu les choses très simples dans Gestion des formats de fichiers basés sur Zip dans Git:

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

[diff "Zip"]

textconv = unzip -c -a
7
Roberto Cabellon

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

En résumé, la principale caractéristique est que git diff travaillez sur tous les formats de fichier de classeur afin qu'il affiche la différence sur le contenu VBA du classeur (nous le ferons également pour le contenu des feuilles de calcul).

Il est encore tôt, mais cela pourrait aider.

2
Bjoern Stiel

Cet utilitaire Excel fonctionne très bien pour moi:

Version Control for Excel

C'est un outil de versioning assez simple pour les classeurs et les macros VBA. Une fois que vous avez validé une version, celle-ci est enregistrée dans un référentiel Git sur votre PC. Je n'ai jamais essayé re. Fichiers de schéma SQL, mais je suis sûr qu'il existe un moyen de contourner le problème.

1
eriklind

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 ceci sous Windows consiste à renommer le fichier <nom_fichier> .xlsx en <nom_fichier> .Zip, et vous verrez le contenu intérieur. Je stockais cela avec le binaire afin que, lors de la validation de votre commande, vous ne fassiez pas d'autres étapes pour ouvrir le document dans Excel.

1
g19fanatic

Utiliser l'extension de document ouverte .fods. C'est un format de balisage XML simple et non compressé qu'Excel et LibreOffice peuvent ouvrir, et les différences seront belles.

1
thouliha

Mon approche avec les fichiers Excel est similaire à celle de Jon, mais au lieu de travailler avec les données de texte brutes Excel, je les 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 les éléments bruts sur cette page .) N'oubliez pas de vérifier le paramètre Excel comme décrit dans le fichier Lisez-moi. 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. 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 des projets autres qu'Excel, en ajoutant simplement le dossier git à la main.

0
stenci