Comparación y fusionado de directorios con KDiff3

Introducción
Frecuentemente los programadores modifican varios archivos en un directorio para conseguir su propósito. Para esto KDiff3 también le permite comparar y fusionar directorios completos recursivamente.
Aunque la comparación y fusionado de directorios parezca bastante obvio, existen varios detalles que debería conocer. Lo más importante es el hecho de la operación podría afectar a muchos archivos. Si no tiene copias de seguridad de los datos originales, podría ser complicado e incluso imposible devolverlos a su estado original. Por lo tanto, antes de realizar un fusionado, asegúrese de guardar sus datos en un lugar seguro, de forma que sea posible volver atrás. Si crea un archivo o utiliza algún sistema de control de versiones es cosa suya, pero los programadores experimentados y los integradores pueden necesitan las antiguas fuentes. Y tenga en cuenta que a pesar de que yo (el autor de KDiff3) intento hacerlo lo mejor posible, no garantizo que no existan fallos. De acuerdo con la licencia GNU GPL NO EXISTE NINGUNA GARANTÍA para este programa. Por lo tanto, sea humilde y tenga siempre lo siguiente en mente:
Errar es humano, pero para echar las cosas a perder necesita un ordenador.
Ésto es lo que este programa puede hacer por usted: KDiff3...
... lee y compara dos o tres directorios recursivamente.
... tiene un especial cuidado con los enlaces simbólicos.
... le permitirá navegar por los directorios con una doble pulsación del ratón.
... para cada elemento propone una operación de fusión, que puede cambiar antes de iniciar la fusión del directorio.
... le permite simular la fusión y lista las acciones que se realizarían si se llegasen a llevar a cabo.
... le permite realizar la fusión, y le permite interactuar cuando sea necesaria la interacción manual.
... le permite ejecutar las operaciones seleccionadas para todos los elementos (tecla F7) o para el elemento seleccionado (tecla F6).
... le permite continuar la fusión después de la interacción manual con la tecla F7.
... crea copias de seguridad opcionales, con la extensión .orig.
...

Iniciar la comparación o fusión del directorio
Es similar a la fusión y comparación de archivos. Solo debe especificar los directorios en la línea de órdenes o en el diálogo abrir archivo.

Comparar/fusionar dos directorios:

kdiff3 directorio1 directorio2
   kdiff3 directorio1 directorio2 -o directorio-destino

Sino se especifica directorio de destino, KDiff3 utilizará directorio2.

Comparar/fusionar tres directorios:

kdiff3 directorio1 directorio2 directorio3
kdiff3 directorio1 directorio2 directorio3  -o directorio-destino

Cuando se fusionen tres directorios directorio1 se utiliza como base para la fusión. Sino se especifica directorio destino, KDiff3 utilizará directorio3 como directorio destino para la fusión.
Tenga en cuenta que solo la comparación se inicia automáticamente, no la fusión. Para esto debería seleccionar la entrada de menú o la tecla F7 (más detalles a continuación).

Información visible
Mientras lee estos directorios se mostrará un cuadro de diálogo en el que se informará del progreso. Si cancela la exploración del directorio, solo se compararán los archivos listados.
Cuando se termine la exploración del directorio KDiff3 mostrará una lista con el resultado...
... y detalles sobre el elemento seleccionado actualmente a la derecha:

La columna nombre
Cada archivo y directorio que se encuentre durante la exploración se mostrará aquí en un árbol. Puede seleccionar un elemento pulsando una vez con el ratón.
De forma predeterminada los directorios están contraídos. Puede expandirlos y contraerlos pulsando en +/-, con una doble pulsación, o utilizando las teclas Flecha izquierda o Flecha derecha. El menú Directorio también contiene dos acciones Plegar todos los subdirectorios y Desplegar todos los subdirectorios con los que podrá contraer y expandir todos los directorios de una vez.
Si hace una doble pulsación sobre un elemento de fichero comenzará la comparación y aparecerá la ventana de diferencias de archivos.
La imagen de la columna nombre reflejará el tipo de archivo en el primer directorio («A»). Puede ser uno de estos:
Archivo normal.
Directorio normal (imagen de directorio).
Enlace a un archivo (imagen de archivo con una flecha de enlace).
Enlace a un directorio (imagen de directorio con una flecha de enlace).
Si el tipo de archivo es diferente en el resto de directorios, ésto podrá verse en las columnas A/B/C y en la ventana que muestra los detalles sobre el elemento seleccionado. Tenga en cuenta que en este caso la fusión no podrá seleccionarse automáticamente. Cuando inicie la fusión, el usuario será informado de problemas de este tipo.

Las columnas A/B/C y el esquema de coloreado
Como puede verse en la imagen superior los colores rojo, verde, amarillo y negro son los que se utilizan en las columnas A/B/C.
Negro: Este elemento no existe en este directorio.
Verde: El elemento más nuevo.
Amarillo: Más antiguo que verde, más nuevo que rojo.
Rojo: El elemento más antiguo.
Pero para los elementos que son idénticos en la comparación sus colores son idénticos aunque no coincida la antigüedad.
Los directorios se consideran iguales si todos los elementos que contienen son idénticos. Entonces tendrán el mismo color. Pero la antigüedad de un directorio no se considerará para su color.
La idea de este esquema de color se basa en dirdiff.Los colores son semejantes a las hojas, que son verdes cuando nacen, se vuelven amarillas más tarde y cuando envejecen se vuelven rojos.

La columna Operación
Después de comparar los directorios KDiff3 también evalúa una propuesta para una operación de fusión. Esto se muestra en la columna Operación. Puede modificar la operación pulsando en la operación que desee cambiar. Aparecerá un pequeño menú y le permitirá seleccionar una operación para este elemento (también puede seleccionar las operaciones a través del teclado. Ctrl+1/2/3/4/Supr seleccionarán A/B/C/Fusionar/Borrar respectivamente si están disponibles). Esta operación se ejecutará durante la fusión. La disponibilidad de estas operaciones dependerá del elemento y del modo de fusión. El modo de fusión será uno de los siguientes:
Fusión del árbol de directorios («A» será tratada como la base más antigua de ambas).
Fusionar dos directorios.
Sincronizar dos directorios (activado a través de la opción Sincronizar directorios).
En la fusión de tres directorios la operación propuesta será: Si para un elemento...
Todos los directorios son iguales: Copiar desde C.
A y C son iguales pero B no: Copiar desde B (o si B no existe, borra el destino, si existe).
A y B son iguales pero C no: Copiar desde C (o si C no existe, borra el destino, si existe).
B y C son iguales pero A no: Copiar desde C (o si C no existe, borra el destino, si existe).
Solo existe A: Borrar el destino (si existe).
Solo existe B: Copiar desde B.
Solo existe C: Copiar desde C.
A, B y C no son iguales: Fusionar.
A, B y C no tienen el mismo tipo de archivo (⪚ A es un directorio, B es un archivo): Error: Conflicto en los tipos de archivo. Mientras existan elementos como éstos la fusión de directorio no comenzará.
En la fusión de dos directorios la operación propuesta será: Si para un elemento...
Ambos directorios son iguales: Copiar desde B.
A existe, pero B no: Copiar desde A.
B existe, pero no A: Copiar desde B.
A y B existe pero no son iguales: Fusionar.
A y B no tienen el mismo tipo de archivo (⪚ A es un directorio, B es un archivo): Error: Conflicto en los tipos de archivo. Mientras existan de elementos como éstos la fusión de directorio no comenzará.
El modo de sincronización estará activo si solo existen dos directorios, no se ha especificado destino y está activa la opción Sincronizar directorios. KDiff3 seleccionará una operación predeterminada de forma que ambos directorios sean idénticos después. Si para un elemento:
ambos directorios son iguales: No se hará nada.
A existe, pero B no: copiar A a B.
B existe, pero A no: Copiar B a A.
A y B existen, pero no son iguales: Fusionar y guardar el resultado en ambos directorios (para los usuarios el nombre de archivo guardado es B, pero entonces KDiff3 copiará B a A).
A y B no tienen el mismo tipo de archivo (⪚ A es un directorio, B es un archivo): Error: Conflicto en los tipos de archivo. Mientras existan de elementos como éstos la fusión de directorio no comenzará.
Cuando se fusionen dos directorios y esté seleccionada la opción Copiar nuevo en lugar de fusionar, KDiff3 buscará en las fechas y propondrá como elección el nuevo archivo. Si los archivos no son iguales pero tienen las mismas fechas, la operación contendrá Error: Las fechas son iguales pero los archivos no. Mientras éstos elementos existan no se iniciará la fusión de directorios.

La columna estado
Durante la fusión se procesará un archivo tras otro. La columna estado mostrará Hecho para los elementos donde se haya producido la operación de fusionado, y otro texto si sucede algo inesperado. Cuando se completa una fusión, debería hacer una última comprobación para ver si el estado de todos los elementos es el adecuado.

Columnas estadísticas
Cuando está activado en las opciones el modo de comparación de archivos Análisis completo, KDiff3 mostrará columnas que contienen el número de conflictos sin resolver, resueltos, no en blanco o de espacios en blanco (la columna resueltos solo se mostrará cuando se comparen o fusionen directorios).

Hacer una fusión
Puede fusionar el elemento seleccionado (archivo o directorio) o todos los elementos. Cuando haya hecho todas sus operaciones de elección (en todos los subdirectorios también) podrá iniciar la fusión.
Sea consciente de que sino especifica un directorio de destino explícitamente, el destino será «C» en el modo de tres directorios, «B» en el modo de fusión de dos directorios, y en el modo de sincronización será «A» y/o «B».
Si ha especificado un directorio de destino marque todos los elementos del árbol que debieran estar en la salida. Existen algunas opciones que hará que se omitan ciertos elementos del directorio de comparación y del de fusión. Marque estas opciones para evitar sorpresas desagradables:
Directorios recursivos: Si está desactivado, no se buscarán los elementos de los directorios.
Patrón/Anti-patrón: Incluir/excluir elementos que coincidan.
Excluir archivos ocultos.
Listar solo deltas: Los archivos que coincidan en todos los directorios no aparecerán en el árbol, de ahí que no aparezcan en el destino.
(En la versión actual, debería volverlo a explorar por sí mismo a través del menú Directorio Volver a buscar, después de cambiar opciones que afecten al directorio explorado).
Si está satisfecho con ésto, el resto es sencillo.
Para fusionar todos los elementos: Seleccione Comenzar/continuar fusión de directorio en el menú Directorio o pulse F7 (que es el acceso rápido). Para fusionar solo el elemento actual: Seleccione Realizar operación para el elemento actual o pulse F6.
Si debido a tipos de archivos conflictivos todavía continúan existiendo operaciones no válidas, aparecerá un mensaje señalándolo, de forma que pueda seleccionar una operación válida para este elemento.
Si fusiona todos los elementos aparecerá un diálogo proporcionándole las opciones Hacer, Simular y Cancelar.
Seleccione Simular si desea ver el resultado sin hacer la fusión. Se mostrará un lista de todas las operaciones.
Sino seleccione Hacer para realizar el fusionado.
Entonces KDiff3 realizará las operaciones especificadas para todos los elementos. Si se precisa interacción manual (fusión de un solo archivo), aparecerá una ventana de fusión (vea la gran captura de pantalla).
Cuando haya terminado con un archivo, seleccione de nuevo Comenzar/continuar fusión de directorio o la tecla F7. Si todavía no la había guardado, un diálogo le preguntará para hacerlo. Entonces KDiff3 continuará con el siguiente elemento.
Cuando KDiff3 encuentre un error, éste se lo indicará con información literal del estado. En la parte inferior de la lista, aparecerán algunos mensajes de error que deberían ayudarle a entender la causa del problema. Cuando continúe con la fusión (tecla F7) KDiff3 le permitirá reintentar o saltarse el elemento que provocó el problema. Esto significa que antes de continuar puede seleccionar otra operación o resolver el problema por otros medios.
Cuando la fusión se haya completado, KDiff3 le informará a través de un cuadro de diálogo.
Si algunos elementos se fusionaron de forma individual KDiff3 lo recordará (mientras esté en esta sesión de fusionado), y no les fusionará nuevamente cuando haga la fusión para todos los elementos. Incluso cuando se salte la fusión o no se guarde nada estos elementos se contarán como completos. Solo cuando cambie la operación de fusión el elemento se fusionará de nuevo.

Opciones para comparación y fusión de directorios
Las preferencias de KDiff3 (menú Preferencias Configurar KDiff3) ahora tienen una sección llamada Fusión de directorio con estas opciones:
Directorios recursivos:	Indica si se realizará la búsqueda en los directorios de forma recursiva.
Patrón(es) de archivo(s):	Solo los archivos que coincidan con el patrón se colocarán en el árbol. Puede especificarse más de un patrón utilizando el punto y coma ; como separador. Comodines válidos: * y ? (⪚ *.cpp;*.h). El valor predeterminado es *. Los directorios no necesitan coincidir con este patrón.
Anti-Patrón(es):	Los archivos y directorios que coincidan con este patrón se excluirán del árbol. Se puede especificar más de un patrón utilizando el ; como separador. Comodines válidos: * y ?. El valor predeterminado es *.orig;*.o.
Usar .cvsignore:	Ignora los archivos y directorios que también se vayan a ignorar por el CVS. Muchos archivos generados automáticamente se ingorarán por el CVS. La gran ventaja es que puede ser un directorio especificado a través del archivo local .cvsignore (vea info:/cvs/cvsignore).
Buscar archivos y directorios ocultos:	En algunos sistemas de archivos tienen un atributo «Oculto». En otros sistemas el nombre de archivo comienza con un punto (.), lo que hace que esté oculto. Esta opción le permite decidir si incluir o no estos archivos en el árbol. De forma predeterminada está activado.
Seguir enlaces de archivos:	Para los enlaces de los archivos: Cuando esté desactivado, se compararán los enlaces simbólicos. Cuando esté activado, se compararán los archivos que estén detrás de los enlaces. De forma predeterminada está desactivada.
Seguir enlaces de directorios:	Para los enlaces de los directorios: Cuando esté desactivado se compararán los enlaces simbólicos. Cuando esté activado, el enlace será tratado como un directorio y se explorará recursivamente (tenga en cuenta que el programa no comprueba si el enlace es «recursivo»). Así por ejemplo, un directorio que contenga un enlace al directorio puede provocar un bucle infinito, y después de cierto tiempo podrá sobrecargar la pila o utilizar toda la memoria, colgando el programa). De forma predeterminada está desactivada.
Listar solo deltas:	Solo los elementos que no sean iguales en todos los directorios de entrada se listarán y solo los cambios de los archivos serán visibles. De ahí que los archivos que sean iguales en todos los directorios no se compiarán durante una fusión y si el directorio de destino no contiene los archivos antes de la fusión, podría omitir algunos archivos posteriormente (probablemente esta opción se cambiará en una versión posterior). De forma predeterminada está desactivada.
Modo de comparación de archivos:	
Comparación binaria:	Éste es el modo de comparación de archivos predeterminado.
Análisis completo:	Hace un análisis completo de cada archivo y muestra las columnas de información estadística (número de conflictos resueltos, sin resolver, no blancos y blancos). El análisis completo es más lento que un simple análisis binario, y mucho más lento cuando se utiliza con archivos que no contienen texto (especifique el anti-patrón archivo).
Validar la fecha de modificación:	Si compara directorios grandes sobre una red lenta, es más rápido comparar solo las fechas de modificación y el tamaño del archivo. Pero esta mejora del rendimiento paga el precio de una pequeña inseguridad. Utilice esta opción con cuidado. De forma predeterminada estará desactivada.
Validar el tamaño:	Similar a la validación de la fecha. No hace comparaciones reales. Dos archivos se consideran iguales si sus tamaños son iguales. Esto es práctico cuando la operación de copiado no conserva la fecha de modificación. Utilice esta opción con cuidado. De forma predeterminada estará desactivada.
Sincronizar directorios:	Activa el «Modo sincronizado» cuando se comparan dos directorios y no se especificó el directorio de destino. En este modo las operaciones propuestas se seleccionarán de forma que tras realizar la operación ambos directorios queden iguales. Por ello el resultado del fusionado se escribirá en ambos directorios. De forma predeterminada estará desactivada.
Copiar el más nuevo en vez de fusionar:	En lugar de fusionar la operación propuesta será copiar la fuente nueva si hubo algún cambio (considerado inseguro, ya que implica que el otro directorio no ha sido editado. Deberá hacer una comprobación para cada caso). De forma predeterminada estará desactivada.
Archivos de copia de seguridad:	Si se reemplaza un archivo o directorio por otro o se borra, la versión original se renombrará con una extensión .orig. Si ya existía un archivo con la extensión .orig se borrará sin hacer copia de seguridad. También afecta al fusionado normal de archivos simples, no solo al modo de fusionado de directorio. De forma predeterminada estará activada.

Otras funciones

Modo de pantalla dividida/completa
Normalmente la vista de la lista de fusionado de directorios permanece visible cuando se compara o fusiona un solo archivo. Con el ratón puede mover la barra divisoria que separa la lista de archivos de las ventanas de texto diff. Sino desea ésto, puede desactivar la Vista de pantalla dividida en el menú Directorio. A continuación utilice Cambiar vista en el menú Directorio para conmutar entre la lista de archivos y la ventana de texto diff que ocupará la pantalla completa.

Comparar o fusionar un solo archivo
Probablemente preferirá una doble pulsación del ratón sobre un archivo para compararlos. Sin embargo existe una entrada en el menú Directorio. También puede fusionar directamente un solo archivo, sin iniciar el fusionado del directorio a través de la opción Fusionar un solo archivo en el menú Directorio. Al guardar el resultado, el estado cambiará a «hecho», y el archivo no se fusionará si se inicia un fusionado de directorio.
Pero tenga en cuenta que la información del estado se perderá cuando vuelva a explorar un directorio: Directorio Volver a buscar.