11
votes

Comparer (et fusionner) deux projets vs c #

J'ai deux projets VS C # (spécifiquement, pour un plug-in Outlook) que je crois être très similaire à l'exception de peut-être 100 lignes de code. Je suis légèrement inquiet d'avoir d'autres options de configuration pour le projet différent, je voudrais donc comparer ces deux.

Quelle est la meilleure façon de voir les différences entre les deux codesbases?

J'ai essayé de mettre les deux projets dans des répertoires parallèles et d'utiliser DIFF, mais depuis que les projets sont nommés différemment, certains des fichiers ne correspondent pas. Je me demande simplement s'il y a un moyen plus facile de le faire?


1 commentaires

Les classes dans les fichiers sources «différents» ont les mêmes noms? Vous pouvez essayer de construire des projets et de comparer les assemblages construits: Stackoverflow.com / Questions / 652432 / ...


4 Réponses :


2
votes

Un moyen: faites des copies des projets, renommez les fichiers et les dossiers de l'une pour correspondre aux fichiers et aux dossiers de l'autre, puis utilisez votre dossier préféré, comparez l'outil pour comparer les deux.

Cela ne vous aidera pas à moins qu'il y ait eu une véritable relation copie-coller entre les deux projets.

La meilleure façon serait d'utiliser le refactoring. Après avoir créé des tests d'unités pour les projets et la réalisation d'un niveau adéquat de la couverture de code, allez la classe par classe et méthode par méthode utilisant le refactoring pour essayer de faire des paires de méthodes identiques. Vous pouvez ensuite identifier des méthodes qui doivent être tirées dans des classes de base ou entrées dans d'autres classes.

Finalement, vous pouvez trouver des paires de classes identiques. Déplacez ces classes dans une bibliothèque commune, puis renommez toutes les utilisations de l'une des classes pour être une utilisation de l'autre. Puis supprimez celui qui n'est plus utilisé.

répéter jusqu'à ce qu'il n'y ait plus de duplication.


1 commentaires

J'aurais pareil jusqu'à quelque 1 autre viennent avec une meilleure réponse



13
votes

On dirait que vous avez besoin de quelque chose comme Winmerge pour passer à travers et signaler les différences entre les deux projets. C'est gratuit et je sais que vous pouvez comparer le contenu du dossier avec Winmerge, c'est donc probablement un bon endroit pour commencer. Exécutez Winmerge sur les dossiers de projet et il devrait générer une comparaison détaillée décrivant les différences entre les fichiers.

Voir ce tutoriel sur la comparaison de dossiers:
http://manual.winmerge.org/comparedirs.html

Entrez la description de l'image ici


5 commentaires

Je suis à peu près sûr qu'il y a des moyens de comptabiliser cela. Dans le pire des cas, je sais que vous pouvez sélectionner des fichiers spécifiques à comparer.


Traiter avec des fichiers renommés est difficile. Si les fichiers ont été renommés et édités légèrement, il serait difficile pour un outil de comparaison de savoir qu'ils étaient en réalité le même fichier à un moment donné. S'il tentait de le faire, cela vous donnerait probablement beaucoup de faux positifs dans lesquels il verrait des fichiers similaires de noms différents. Et il devrait y avoir un seul seuil qu'il décidait de décider si deux fichiers similaires étaient suffisamment similaires / différents pour faire cette décision.


Dans de tels cas, vous pouvez toujours sélectionner les fichiers à comparer manuellement. Je sais que ce n'est pas idéal, mais cela devrait travailler en supposant qu'il n'y ait que quelques fichiers renommés.


J'ai utilisé l'outil Winmerge avec des suggestions supplémentaires de l'autre réponse sur la non-renommée des fichiers renommés. Merci à tous pour les grandes idées!


Cela a sauvé ma journée



7
votes

Je recommande fortement Code Comparer (non affilié, juste un utilisateur heureux) pour ce type de travail - Il y a une version gratuite et une version commerciale plus avancée.

Il s'intègre bien avec VS et la syntaxe en surbrillance pour C #, C / C ++ etc.


0 commentaires

1
votes

Si vous avez des modifications telles que Renames ou Code partiel, Importation des deux versions dans un seul référentiel git (comme deux commits différents d'un répertoire unique) pourrait aider. GIT SHITS Contenu des fichiers, pas les fichiers eux-mêmes, il est donc possible de déterminer par ex. une fonction qui a été déplacée d'un fichier à un autre.


0 commentaires