2011-10-14 2 views
8

Il semble que quelqu'un ait déjà fait cela, mais je ne trouve pas le produit final que je cherche. L'utilisation d'un système de contrôle de version pour le texte est laborieuse. Vous avez besoin de caractères de nouvelle ligne à la fin de chaque phrase, et même au milieu de longues phrases. En regardant la source git, il semble qu'en changeant quelques routines qui vérifient '\n', il devrait être possible que git (ou tout autre système de contrôle de version) corresponde à '\n' ou au modèle '\\.\s'. C'est cependant une tâche qui doit être méticuleusement effectuée, ou je peux voir les choses se casser assez mal.Contrôle de version pour la prose

Quelqu'un connaît quelqu'un qui a déjà fait cela? Ou d'autres alternatives?

Merci!

+1

Je vous suggère d'utiliser MediaWiki pour cela. Il fait ce genre de service (prose de versioning, je veux dire) comme un charme. C'est une application PHP, c'est sûr, mais ça vaut le coup. – brandizzi

+0

git travaille pour la prose. git ne nécessite pas de lignes courtes ou des sauts de ligne supplémentaires où vous ne les auriez pas naturellement. –

+0

Votre souci est-il d'afficher des diffs propres ou d'avoir une compression efficace? Git devrait aller bien sur ce dernier. Il peut également faire des diffs de mots, ce qui permettrait de résoudre beaucoup de vos problèmes, et il peut même passer des diffs à un difftool externe si vous le souhaitez. – Cascabel

Répondre

3

Tout système de contrôle de version devrait être capable de gérer la prose. La question est de savoir comment il peut le faire efficacement.

La commande git diff utilise quelque chose comme diff -u pour afficher les différences entre deux versions d'un fichier. Si le fichier est constitué de texte avec de très longues lignes (c'est-à-dire de nombreux caractères compris entre '\n' caractères), il peut alors être difficile d'afficher les différences de manière significative; il peut afficher deux lignes de 5000 caractères avec un seul changement de caractère.

Mais cela n'implique pas nécessairement que c'est ainsi que gitstocke les fichiers. Je ne suis pas intimement familier avec le format de stockage interne de git, mais je crois comprendre que cela fonctionne raisonnablement bien avec les fichiers binaires, qui pourraient avoir plusieurs mégaoctets de données sans '\n' caractères.

Notez que certains anciens systèmes de contrôle de version (SCCS, RCS) stockent probablement les différences entre les versions ligne par ligne. Mais même pour de tels systèmes, au pire vous stocker une copie complète de chaque version plus une surcharge. Le système devrait toujours être capable de fonctionner correctement.

Notez que git diff --word-diff devrait au moins partiellement contourner le problème de la comparaison des versions.

+0

Juste comme une note sur le très utile «git diff --word-diff» - cette fonctionnalité a été ajoutée dans la version 1.7.2, mais dans les versions antérieures, vous pouvez utiliser 'git diff --color-words'. –

+0

Merci pour toutes les réponses. J'ai trouvé le commentaire de Jefromi particulièrement utile, et en conjonction avec la réponse de Keith, je pense que je comprends ce que je veux. Je ne m'inquiète pas comment git fait le diff et le stockage, je veux qu'il soit intelligent en affichant les diffs. Si le texte source n'est pas condensé (pas de saut de ligne dans la source), je veux que chaque phrase (délimitée par des points) soit traitée comme une unité séparée pour l'affichage diff. – dgorur