Comment comparez-vous plusieurs dossiers avec les mêmes fichiers pour trouver les différentes versions du même fichier?

7

J'ai plus de 700 dossiers avec le même ensemble de plus de 200 fichiers asp classiques (essentiellement des fichiers texte) dans chaque dossier. Au fil des ans, diverses personnes ont apporté des modifications mineures à l'intérieur de ces fichiers asp. J'ai besoin d'un utilitaire (pour Windows) capable de comparer tous les dossiers et fichiers et d'identifier toutes les versions différentes des mêmes fichiers.

Quelqu'un a-t-il une suggestion?

Daniel Brink
la source
4
Inventez une machine à remonter le temps, revenez à l'époque où vous n'aviez qu'un dossier de plus de 200 fichiers asp, implémentez le contrôle de version, revenez à aujourd'hui, le problème a disparu! ;)
Shevek
Je souhaite tellement que c'était une option
Daniel Brink
avez-vous envisagé de demander à stackoverflow si quelqu'un d'autre a eu un problème similaire? Peut-être avec un projet non-scm-ed ...
Tobias Kienzler
En utilisant simplement l'invite de commande, vous pouvez comparer efficacement deux fichiers ou dossiers. funbutlearn.com/2012/10/…
Technology123
1
Quelqu'un me disait qu'il y avait une commande Windows intégrée dans cmd appelé RoboCopy En outre, il existe une application appelée WinMerge que vous pouvez installer sur Windows pour différencier les fichiers. Ça va prendre du temps, peu importe l'outil que vous choisissez
Kolob Canyon

Réponses:

4

Utilisation git et un script pour créer une branche par dossier dans un seul référentiel, puis le faire essayer et les fusionner en une seule. Vous serez averti à chaque fois que les fichiers diffèrent.

Tobias Kienzler
la source
maintenant c'est une bonne idée! mais si vous voulez une histoire parfaite, il faut connaître l'ordre dans lequel les 700 annuaires ont été créés
Shevek
@ Shevek pour être plus précis, l'ordre dans lequel les fichiers ont été modifiés et vous n'obtiendrez que la dernière modification Mais bon, bash peut tout faire. Mais les fenêtres ...?
Tobias Kienzler
avez-vous pensé combien de temps il faudrait pour faire plus de 700 fusions d'une arborescence de fichiers contenant plus de 200 fichiers? Je recule même en essayant d'imaginer ...
Evan Plaice
La fusion de @Evan git est très intelligente: se souvenir de vos fusions précédentes et tenter de minimiser les interactions. Mais oui, ce serait toujours une tâche sisyphe, je suppose.
Tobias Kienzler
1

Vous pourriez commencer par utiliser un programme comme dupehunter pour réduire la structure aux fichiers vraiment différents (bien sûr, vous devriez commencer par une structure de dossiers copiée!). ensuite WinMerge peut au moins comparer deux dossiers.

Tobias Kienzler
la source
jip, en utilisant un outil comme dupehunter aide. Il semble que la majorité des fichiers soient identiques dans tous les dossiers, mais il me faut tout de même un moyen de voir quelles sont les différences entre les fichiers, qui ne sont pas des doublons exacts, plus de 2000 fichiers. faire cela un par un prendra des années
Daniel Brink
Merci pour la suggestion WinMerge. Sauvé ma journée. Je dois comparer deux versions du même projet et avec WinMerge, j'ai trouvé toutes les différences dans plusieurs dossiers imbriqués en quelques minutes. Il vous indique si deux fichiers sont identiques ou différents et met en évidence les différences.
Oncel Umut TURER
@OncelUmutTURER Glad to Hear :) Rien ne vaut OpenSource
Tobias Kienzler
1

Ce que vous cherchez, c'est une application de synchronisation de fichiers ...

DirSync Pro est mon préféré

Remarque: je sais que le mot «pro» donne l’impression d’un crud marketing moyen à moitié cuit, mais ne vous laissez pas duper. DirSync Pro est gratuit, open source et multiplate-forme.

:: Je remue le doigt :: Et j'espère que vous n'aurez pas appris la leçon de cette débâcle;). Obtenez ces fichiers sous contrôle de révision et branche si vous avez besoin de plusieurs versions simultanées du développement.

Evan Plaice
la source
Votre solution ne se contente-t-elle pas de synchroniser? Je veux dire, cela ne va-t-il pas simplement écraser toutes les modifications avec une seule version?
Tobias Kienzler
@ Tobias oui, si vous choisissez d'écraser. Je sais où vous voulez en venir ... Pourquoi ne pas proposer une solution permettant de suivre les changements au fil du temps? Parce que ce n'est pas ce qu'il a demandé, "compare tous les dossiers et fichiers et identifie toutes les versions différentes des mêmes fichiers". Ma solution volonté Identifiez les différentes versions en fonction de leurs attributs de fichier, car l'étape avant la synchronisation consiste à effectuer une comparaison en masse. Là où il va il y a sa décision. Personnellement, je ferais tout pour fusionner la version la plus récente et commencer une nouvelle histoire à partir de là, mais je ne suis pas l'op.
Evan Plaice
Malheureusement, je ne peux rien fusionner, chacun de ces 700 dossiers est un système "personnalisé" utilisé par les clients. J'essaie de corriger le problème en recherchant ce qui est identique dans tous les dossiers et en le remplaçant par une page centrale, jusqu'à ce qu'il ne reste qu'un système central. Il n’est jamais amusant de nettoyer les problèmes hérités créés par les programmeurs qui ont quitté la société il ya plusieurs années, mais cela doit être fait.
Daniel Brink
@ Daniel ooooh. Lorsque vous avez dit "le même ensemble de 200 fichiers asp classiques", vous vouliez dire que les 700 dossiers ne constituaient que quelques jeux. Donc, ce que vous dites, c’est 200 * 700 ~ = 140k fichiers? Ouch ... Eh bien, dirsync vous permettra de commencer à comparer les dossiers 1 à 1 pour voir les différences, mais vous devrez le faire plus de 700 fois.
Evan Plaice
1
@Daniel ce dont vous avez besoin est un script qui explore les 700 répertoires et plus, fichier par fichier, et les compare ligne par ligne pour extraire uniquement les éléments uniques. Ensuite, en comparant les versions par rapport aux dernières dates modifiées dans les attributs de fichier, classez-les dans l'ordre chronologique. Ensuite, vous pouvez entrer le delta (diff) de chaque version ultérieure dans un référentiel pour créer un historique. Le seul problème est qu’il n’ya aucun moyen de garantir que vous puissiez conserver la fonctionnalité des versions originales. Est-ce un problème?
Evan Plaice
0

Aucune idée d'outils prédéfinis pour le faire. Si vous êtes à l'aise pour écrire un petit script, vous pouvez parcourir les dossiers en conservant une carte des noms de fichiers dans les fichiers de hachage. À la fin, vous aurez toutes les informations dont vous avez besoin, mais je ne sais pas exactement comment vous voulez les présenter ou comment vous avez l’intention de les utiliser.

Si vous voulez quelque chose qui remarque de manière semi-intelligente ce fichier X dans le dossier c semble être basé sur le même fichier dans le dossier b , qui à son tour était basé sur le même fichier dans le dossier une (c'est-à-dire que le logiciel essaie d'inférer une "arborescence des modifications" pour chaque fichier), alors je pense que c'est un peu difficile.

Andy
la source
Je n'ai aucun problème à écrire l'application moi-même, mais je préférerais ne pas réinventer la roue si quelqu'un d'autre l'avait déjà écrite.
Daniel Brink
0

ce que vous recherchez, c'est le contrôle de source. Nous utilisons Tortoise SVN ici dans mon entreprise et nous l’adorons. si vous installez "Tortoise SVN" pour Windows, cela devrait faire l'affaire. il suffit de créer un référentiel et d'importer le dossier le plus ancien. une fois que le code de base est dans SVN, créez une "copie de travail". écraser les fichiers de ce dossier avec le prochain dossier le plus ancien, commit, repeat. Je me rends compte que c’est toujours assez décourageant avec plus de 700 dossiers (ou révisions), mais vous ne pouvez pas faire grand chose de plus lorsque vous implémentez le contrôle de source aussi tard dans la partie. Une fois que vous avez tout dans SVN, vous pouvez obtenir l'historique complet de chaque fichier individuellement.

steve
la source
2
TortoiseSVN est juste un client (pour Windows). Vous avez toujours besoin d’un serveur Subversion pour tout faire.
paradroid