2010-09-27 28 views
32

Estoy moviendo un repositorio de sourcesafe a subversion y necesito asegurarme de que los puntos vitales sean iguales. ¿Es un comando/herramienta existente para Windows que me permite comparar dos árboles de carpetas que son iguales (tiene la misma estructura de carpetas y archivos del mismo contenido)? Lo ideal será algo de línea de comandos como:¿Cuál es la mejor manera de comparar 2 árboles de carpetas en Windows?

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

¿Es alguna herramienta de comando/existe o tengo que escribir un guión de mi cuenta?

+0

Véase también http://superuser.com/questions/31345/what-is-the-best-directory-diff -tool – Marijn

+0

@Marijn El enlace fue eliminado. ¿Podría escribir una respuesta con la información que se eliminó? – user5389726598465

+0

Lo siento, no puedo recordar. – Marijn

Respuesta

30

Si puede utilizar una herramienta de interfaz gráfica de usuario, lo mejor que probé es WinMerge - de código abierto.

Si no, entonces diff es su amigo.

+0

Las herramientas de la GUI son buenas, pero actualmente tengo un archivo de proceso por lotes que comprueba los puntos vitales tanto para la protección de fuentes como para la subversión, y son muchos de esos puntos. Será preferible integrar una herramienta de línea de comandos para la prueba. – grigoryvp

+2

entonces ... diff es tu amigo ... algo como esto: http://gnuwin32.sourceforge.net/packages/diffutils.htm – Palantir

+0

Sé que este hilo es viejo, pero lo encontré mientras buscaba la pregunta exacta el OP preguntó. Actualmente es verano de 2016. Comparé ** WinMerge ** con ** ExamDiff ** Pro. Prefiero ExamDiff por muchas razones (por ejemplo, hay "arriba en el botón de nivel de carpeta"). Además, en WinMerge, en el selector de comparación de "Archivos y carpetas", no le permite elegir una carpeta con GUI (tiene que pegar en la ruta de la carpeta). Estoy usando la prueba Pro de [ExamDiff 8.0] (http://www.prestosoft.com/edp_examdiff.asp) (30 días). Espero que eso ayude a algunos de ustedes. –

23

Beyond compare le permite hacer eso y mucho más.

Es una de esas herramientas que no puedo vivir sin él.
Tome una mirada here para una referencia sobre las opciones de scripting

+0

Una versión de prueba de esto me funcionó bastante bien para la única tarea que tuve. Parece que una licencia comienza en US $ 30. –

6

Como soy reacio a instalar nuevos programas en mi máquina, esta secuencia de comandos PowerShell (de Hey, Scripting Guy! Blog) ayudó a resolver mi problema. Sólo modificado el camino para satisfacer mi caso:

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

muy bonito, pero sloooooow :) –

+0

Extremadamente lento. Tengo un hilo que utiliza completamente un núcleo durante unas pocas horas sin acceso al disco. Y no hay comentarios sobre el progreso. Así que abortó el experimento. Necesito algo mucho más rápido y más práctico. – user643011

0

Al igual que el OP, que estaba buscando una herramienta de diferencias carpeta de Windows, en particular uno que pudiera manejar árboles muy grandes (100s de gigabytes de datos). Gracias Lieven Keersmaekers por el puntero a BeyondCompare, que me pareció MUY rápido (aproximadamente 10-100 veces más rápido) que mi herramienta anterior de la escuela anterior windiff.

Por cierto, BeyondCompare tiene un modo de línea de comandos, además de la interfaz gráfica de usuario.

2

También puede ejecutar tree > tree.txt en ambas carpetas y luego diff ambos archivos tree.txt con cualquier herramienta de diferencias basado en archivos (git diff).

1

SyncToy es una aplicación gratuita de Microsoft con un modo de "Vista previa" para la comparación de dos caminos. Por ejemplo:

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

A continuación, puede elegir uno de tres modos ("Sincronizar", "Eco" y "Contribuir") para resolver las diferencias.

Por último, viene con SyncToyCmd para crear y sincronizar pares de carpetas desde la CLI o una tarea programada.

+0

Intenté instalar SyncToy pero insiste en que necesita una versión realmente antigua del .NET framework instalado (v2.0.50727). ¡Parece que ya tengo instalado v4.7.1 o posterior! No confío en que el software viejo sea seguro, así que probaré una herramienta diferente. –

+1

¡Una preocupación válida! Pero .NET Framework (incluso 2.0) todavía es totalmente compatible con Microsoft. No es necesario instalarlo manualmente: puede [habilitarlo directamente en el Panel de control de Windows 10] (https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10#enable- the-net-framework-35-en-panel de control). –

0

Puede usar git para este propósito. Básicamente, crea un repositorio git en la carpeta A (el repositorio está en A/.git), luego copie A/.git en B/.git, luego cambie a la carpeta B y compare simplemente ejecutando git diff. Y la funcionalidad --exclude se puede lograr con .gitignore.

Así, pegar a su ejemplo (pero usando shell bash en 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 
Cuestiones relacionadas