121 votes

Comment améliorer le contrôle de la version des documents sur les fichiers Excel et les fichiers de schéma SQL ?

Je suis chargé de plusieurs fichiers Excel et de fichiers de schéma SQL. Comment dois-je effectuer un meilleur contrôle de version de 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 pour mieux contrôler les versions des documents ?

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

96voto

1615903 Points 3355

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 résumé, vous devriez ajouter cette option à votre fichier .gitattributes :

*.xls diff=xls

Et dans le fichier .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 également, ce qui fait que git diff un outil très utile pour les documents de bureau. Voici 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 contient un bon chapitre sur le sujet : 8.2 Personnalisation de Git - Attributs Git

51voto

kirelagin Points 5717

Puisque vous avez marqué votre question avec git Je suppose que vous demandez l'utilisation de Git pour cela.

Eh bien, les dumps SQL sont des fichiers texte normaux, il est donc parfaitement logique de les suivre avec Git. Il suffit de créer un référentiel et de les y stocker. Lorsque vous obtenez une nouvelle version d'un fichier, écrasez-la simplement et livrez-la, Git se chargera de tout pour vous, et 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. .xlsx sont des répertoires zippés de fichiers XML (cf. Comment assembler correctement un fichier xlsx valide à partir de ses sous-composants internes ? ). Git les considérera comme binaires à moins qu'ils ne soient décompressés. Il est possible de décompresser les .xlsx et suivre les modifications apportées aux différents fichiers XML contenus dans l'archive.

Vous pouvez également le faire avec .xls mais le problème ici est que .xls est binaire, vous ne pouvez donc pas obtenir de différences significatives à partir de ce format. Mais vous serez toujours en mesure de voir l'historique des modifications et d'extraire des versions spécifiques.

23voto

Jon G Points 790

J'ai été confronté à ce problème exact ces derniers 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 la 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 quelconque, je serai heureux de rendre cela plus configurable, mais pour le moment, vous devez mettre l'exécutable dans un dossier (par exemple, la racine de votre dépôt de sources) et quand vous le lancerez, il le fera :

  • Recherchez les fichiers .xlsx et .xlsm dans le dossier et ses sous-dossiers.
  • Prenez une copie du fichier en tant que *.orig.
  • Dézipper chaque fichier et le re-zipper sans compression.
  • Impression de tous les fichiers de l'archive qui sont des fichiers XML valides.
  • Supprimez le fichier calcchain.xml de l'archive (car il change beaucoup et n'affecte pas le contenu du fichier).
  • Inlinez toutes les valeurs de texte non formatées (sinon, elles sont conservées dans une table de consultation qui entraîne d'importants changements dans le XML interne si une seule cellule est modifiée).
  • Supprimez les valeurs de toutes les cellules qui contiennent des formules (car elles peuvent être calculées à la prochaine ouverture de la feuille).
  • Créez un sous-dossier *.extracted, contenant le contenu de l'archive zip extraite.

Il est clair que tous ces éléments ne sont pas nécessaires, mais le résultat final est un fichier de feuille de calcul qui s'ouvrira toujours dans Excel, mais qui se prête beaucoup mieux au diffing et à la compression incrémentielle. En outre, le fait de stocker également les fichiers extraits rend beaucoup plus évidentes, dans l'historique des versions, les modifications qui ont été appliquées dans chaque version.

Si vous avez de l'appétit, je serais heureux de rendre l'outil plus configurable, car je suppose que tout le monde ne voudra pas que le contenu soit extrait, ou éventuellement que les valeurs soient 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 se "décompresse" en 21 Mo, mais j'ai ensuite été en mesure de stocker cinq versions de cette feuille, avec de petites modifications entre chacune d'elles, dans un fichier de données Mercurial de 1,9 Mo, et de visualiser efficacement les différences entre les versions à l'aide du logiciel Au-delà de la comparaison en mode texte.

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

12voto

Roberto Cabellon Points 107

Tante a recommandé une approche très simple en Gestion des formats de fichiers basés sur le format ZIP dans Git :

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

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

5voto

user1655478 Points 38

Utilisez l'extension "Ouvrir un document". .fods . Il s'agit d'un format de balisage XML simple et non compressé qu'Excel et LibreOffice peuvent ouvrir, et les différences auront l'air bonnes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X