2010-10-14 10 views
0

J'essaye de coder un site qui permettra à plusieurs personnes de travailler sur un fichier en même temps. Ce faisant, le plus gros blocage que j'ai rencontré est la fusion des nouvelles versions des fichiers, le style de contrôle de version.Comment puis-je fusionner deux versions d'un fichier en PHP ou en JavaScript?

J'ai été incapable de trouver quelque chose dans la veine d'une fonction JavaScript ou PHP intégrée qui va m'aider avec cela. Le plus proche que j'ai trouvé est array_diff, ce qui n'est vraiment pas ce dont j'ai besoin, car cela retourne simplement quels éléments ne sont pas présents dans l'autre tableau, et si j'ai un tableau de mots, il y a nécessairement des répétitions; De plus, array_diff ignore le nombre de fois que quelque chose apparaît ou sa position dans le fichier.

J'ai examiné un peu l'algorithme de distance de Levenshtein, qui est intégré en fonction de php, mais je ne suis pas sûr si c'est ce dont j'ai besoin. Si c'est le cas, dites-le moi s'il vous plaît, et je m'y pencherai plus avant.

Y a-t-il quelque chose que vous sachiez qui convienne à mes besoins?

EDIT:

Permettez-moi de clarifier un peu. Je ne suis pas en train de concevoir un système de contrôle de version. Je veux seulement fusionner les dossiers, ne pas stocker de vieilles versions, etc. L'installation d'un CVS ou d'un SVN ou quelque chose du genre reste-t-il toujours ma meilleure option pour utiliser cette fonction?

Répondre

1

Pourquoi réinventer la roue? J'utiliserais exec avec "diff" pour trouver les différences entre deux fichiers et commencer à travailler à partir de là. Néanmoins, cela ne résoudra pas les problèmes que CVS ne peut pas résoudre: si des conflits surviennent (parce que deux personnes ou plus ont changé la même ligne de code), vous devrez résoudre ces conflits manuellement (ou laisser les éditeurs le font).

Mais là encore: pourquoi ne pas utiliser CVS tout de suite et utiliser un Web-viewer avec lui?
par exemple. http://www.viewvc.org

1

mercurial, subversion, cvs, ... Ne réinventez pas la roue en effet.

2

L'algorithme principal est LCS.

Ce qui est utilisé pour générer la vue côte à côte dans des programmes tels que WinMerge.

J'ai effectivement fait une version basée sur le Web mais je suis resté bloqué sur la synchronisation du défilement des deux fenêtres et ils sont allés avec une solution clunkier.