2010-09-27 6 views
32

Je déplace un référentiel de sourcesafe vers subversion et je dois m'assurer que les points vitaux sont égaux. Est-ce une commande/un outil existant pour Windows qui me permet de comparer deux arbres de dossiers qui sont égaux (a une structure de dossiers égale et des fichiers de même contenu)? L'idéal sera de ligne de commande de quelque chose comme:Quelle est la meilleure façon de comparer 2 arborescences de dossiers sur Windows?

some_cool_compare c:\current_vss c:\current_svn -exclude .svn;*.vspscc;*.scc 

Est-ce un outil/commande existe ou je dois écrire un script de mon propre?

+0

Voir aussi http://superuser.com/questions/31345/what-is-the-best-directory-diff -tool – Marijn

+0

@Marijn Le lien a été supprimé. Pourriez-vous écrire une réponse avec l'information qui a été supprimée? – user5389726598465

+0

Désolé, je ne me souviens pas. – Marijn

Répondre

30

Si vous pouvez utiliser un outil graphique, le meilleur que j'ai essayé est WinMerge - open source.

Si ce n'est pas le cas, alors diff est votre ami.

+0

Les outils graphiques sont bons, mais actuellement j'ai un fichier batch qui vérifie les points essentiels pour les sourcesafe et subversion, et c'est beaucoup de ces points. L'intégration d'un outil de ligne de commande au test sera préférable. – grigoryvp

+2

alors ... diff est votre ami ... quelque chose comme ceci: http://gnuwin32.sourceforge.net/packages/diffutils.htm – Palantir

+0

Je sais que ce fil est vieux, mais je suis tombé dessus tout en cherchant la question exacte l'OP a demandé. C'est actuellement l'été 2016. J'ai comparé ** WinMerge ** à ** ExamDiff ** Pro. Je préfère ExamDiff pour de nombreuses raisons (par exemple, il y a "sur le bouton de niveau de dossier"). Aussi, sur WinMerge dans le sélecteur de comparaison "Files and Folders" il ne vous permet pas de choisir un dossier avec gui (vous devez coller dans le chemin du dossier). J'utilise le test [ExamDiff 8.0] (http://www.prestosoft.com/edp_examdiff.asp) Pro (30 jours). J'espère que cela aide certains d'entre vous. –

23

Beyond compare vous permet de faire cela et bien plus encore.

C'est l'un de ces outils dont je ne peux pas me passer.
Jetez un oeil here pour une référence sur les options de script

+0

Une version d'essai de cela a très bien fonctionné pour moi pour la seule tâche que j'avais. On dirait qu'une licence commence à 30 US $. –

6

Comme je suis réticent à installer de nouveaux programmes dans ma machine, ce script PowerShell (à partir Hey, Scripting Guy! Blog) m'a aidé à résoudre mon problème. Je ne modifié le chemin en fonction de mon cas:

$fso = Get-ChildItem -Recurse -path F:\songs 
$fsoBU = Get-ChildItem -Recurse -path D:\songs 
Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU 
+1

très agréable, mais sloooooow :) –

+0

Extrêmement lent. J'ai un thread utilisant pleinement un noyau pendant quelques heures sans accès au disque. Et pas de retour sur les progrès. Donc avorté l'expérience. J'ai besoin de quelque chose de plus rapide et de plus pratique. – user643011

0

Comme l'OP, je cherchais un outil de comparaison de dossier Windows, dans un particulier qui pourrait gérer de très grands arbres (100s de giga-octets de données). Merci Lieven Keersmaekers pour le pointeur vers BeyondCompare, que j'ai trouvé très rapide (environ 10-100 fois plus rapide) que mon ancien outil scolaire windiff. BTW, BeyondCompare a un mode ligne de commande en plus de l'interface graphique.

2

Vous pouvez également exécuter tree > tree.txt dans les deux dossiers, puis diff deux fichiers tree.txt avec n'importe quel outil de comparaison de fichiers (git diff).

1

SyncToy est une application gratuite de Microsoft avec un mode "Aperçu" pour comparer deux chemins. Par exemple:

SyncToy Preview screenshot (source: https://maketecheasier-2d0f.kxcdn.com/assets/uploads/2010/06/synctoy-preview.png)

Vous pouvez alors choisir l'un des trois modes ("Synchronize", "Echo" et "Contribuer") pour résoudre les différences. Enfin, il est livré avec SyncToyCmd pour créer et synchroniser des paires de dossiers à partir de la CLI ou d'une tâche planifiée.

+0

J'ai essayé d'installer SyncToy mais il insiste sur le fait qu'il a besoin d'une version très ancienne du framework .NET installé (v2.0.50727). Je semble avoir déjà installé v4.7.1 ou plus tard! Je n'ai pas confiance en un logiciel aussi ancien, alors je vais essayer un autre outil. –

+1

Une préoccupation valable! Mais le .NET Framework (même 2.0) est toujours entièrement pris en charge par Microsoft. Pas besoin d'installer manuellement - vous pouvez [l'activer directement dans le Panneau de configuration de Windows 10] (https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10#enable- the-net-framework-35-in-control-panel). –

0

Vous pouvez utiliser git à cette fin. Fondamentalement, vous créez un dépôt git dans le dossier A (le repo est dans A/.git), puis copiez A/.git à B/.git, puis passez au dossier B et comparez simplement en exécutant git diff. Et la fonctionnalité --exclude peut être atteint avec .gitignore.

Alors, coller à votre exemple (mais en utilisant shell bash sous Linux):

# Create a Git repo in current_vss 
pushd current_vss 
printf ".svn\n*.vspscc\n*.scc" >> .gitignore 
git init && git add . && git commit -m 'initial' 
popd 

# Copy the repo to current_svn and compare 
cp -r current_vss/.git* current_svn/ 
pushd current_svn 
git diff 
Questions connexes