web-dev-qa-db-fra.com

Quel est le meilleur moyen de comparer deux arborescences de dossiers sous Windows?

Je déplace un référentiel de sourcesafe vers Subversion et je dois veiller à ce que les points vitaux soient égaux. Est-ce une commande/un outil existant pour Windows qui me permet de comparer deux arborescences de dossiers identiques (structure de dossiers identique et fichiers de même contenu)? L'idéal sera quelque chose en ligne de commande comme:

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

Est-ce que certains outils/commandes existent ou je dois écrire mon propre script?

49
grigoryvp

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

Si non, alors diff est votre ami.

41
Palantir

Au-delà de comparer vous permet de faire cela et bien plus encore.

C'est un de ces outils sans lesquels je ne peux pas vivre.
Regardez ici pour une référence sur les options de script

30
Lieven Keersmaekers

Vous pouvez aussi exécuter tree > tree.txt dans les deux dossiers, puis diff dans les deux fichiers tree.txt avec n’importe quel outil basé sur les fichiers (git diff).

9
halllo

Comme je suis réticent à installer de nouveaux programmes sur ma machine, ce script PowerShell (de Hey, Scripting Guy! Blog ) m'a aidé à résoudre mon problème. J'ai seulement modifié le chemin pour l'adapter à mon cas:

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

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 ensuite choisir l'un des trois modes ("Synchroniser", "Echo" et "Contribute") pour résoudre les différences.

Enfin, il est livré avec SyncToyCmd pour la création et la synchronisation de paires de dossiers à partir de la CLI ou d'une tâche planifiée.

4
Todd Mazierski

Vous pouvez utiliser git exactement à cette fin. En gros, vous créez un référentiel git dans le dossier A (le référentiel est dans A/.git), puis copiez A/.git à B/.git, puis passez au dossier B et comparez simplement en exécutant git diff. Et le --exclude la fonctionnalité peut être obtenue avec .gitignore.

Donc, restez fidèle à votre exemple (mais en utilisant bash Shell 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
4
Alexey Polonsky

Avez-vous essayé: https://www.araxis.com/merge/index.fr Il permet de visualiser les modifications et de fusionner de manière sélective les différences spécifiques entre fichiers et dossiers.

1
Valeriy Pogosyan

À l'instar de l'OP, je recherchais un outil de différenciation des dossiers Windows, en particulier un outil capable de gérer des arbres très volumineux (des centaines de gigaoctets de données). Merci Lieven Keersmaekers pour le pointeur sur BeyondCompare , que j’ai trouvé TRÈS rapide (environ 10 à 100 fois plus rapide) que mon ancien outil d’école ancienne windiff .

BTW, BeyondCompare a un mode ligne de commande en plus de l'interface graphique.

1
Mike Rizzi