# El manual de &kdiff3;

Joachim
Eibl
joachim.eibl@gmx.de
Santiago
Fernández Sancho

    santi@est.unileon.es

Traductor
2002
2005
Joachim Eibl
&FDLNotice;
2005-01-30
0.9.87

&kdiff3; es una herramienta para ver diferencias y fusionar archivos y directorios que:

- Compara y fusiona dos o tres archivos o directorios de texto.

- Muestra las diferencias línea a línea y caracter a caracter (!).

- Proporciona una utilidad de fusión automática.

- Tiene un editor para resolver de forma cómoda los conflictos de fusión.

- Proporciona transparencia de red a través de KIO.

- Tiene opciones para resaltar u ocultar los cambios en los espacios en blanco o en los comentarios.

- Soporta Unicode, UTF-8 y otras codificaciones de archivo.

KDE
kdeextragear
kdiff3
diferencia
fusión
CVS
triple diferencia
comparar
archivos
directorios
control de versiones
fusión del árbol
diferencias en línea
sincronización
kpart
kio
transparencia de red
editor
espacio en blanco
comentarios

## Introducción

### ¿Otro interfaz para diff?

Ya existen varias herramientas gráficas para diff. ¿Por qué elegir &kdiff3;? Déjeme decirle por qué lo escribí.

&kdiff3; se inició debido a la dificultad para hacer la fusión. La fusión es necesaria cuando varias personas trabajan sobre los mismos archivos en un proyecto. Una fusión puede ser algo automatizado, cuando la herramienta de fusionado no solo tiene nuevos archivos modificados (llamados «ramas»), sino también el archivo original (llamado «base»). La herramienta de fusionado seleccionará automáticamente cualquier modificación que se haga solo en una rama. Cuando varios colaboradores cambian la misma línea, la herramienta detecta un conflicto que deberá resolverse manualmente.

El fusionado se vuelve difícil porque, por ejemplo, un colaborador cambió muchas cosas y corrigió el sangrado en algunos lugares. Otro colaborador también cambió mucho texto en el mismo archivo, y todo esto dió como resultado varios conflictos durante la fusión.

La herramienta que utilizaba, solo mostraba las líneas cambiadas, pero no los cambios hechos en estas líneas. Y no había información sobre los cambios en el sangrado. La fusión era una pequeña pesadilla.

Por eso empecé. La primera versión podía mostrar las diferencias en un línea y las diferencias en los espacios en blanco. Después se añadieron otras características para incrementar la utilidad.

Por ejemplo, si desea comparar algún texto rápidamente, podrá copiarlo al portapapeles y pegarlo en otra ventana de diff.

Una característica que requería un enorme esfuerzo era la capacidad de comparar y fusionar directorios, que convirtió el programa en un navegador de archivos completo.

Espero que &kdiff3; le funcione también. ¡Diviértase!

Joachim Eibl (2003)

### Capturas de pantalla y características

Esta captura de pantalla muestra la diferencia entre dos archivos de texto.

(Utilizando una versión temprana de &kdiff3;):

Están plenamente soportadas 3 formas de fusionado. Ésto es práctico si dos personas cambian código de manera independiente.

El archivo original (la base) se utiliza para ayudar a &kdiff3; a seleccionar automáticamente los cambios correctos.

El editor de la fusión inferior le permitirá resolver los conflictos a través de las ventanas de diff, mostrándole la salida que obtendría.

También podrá editar la salida.

Esta captura muestra tres archivos de entrada que se han fusionado:

&kdiff3; también le ayuda a comparar y fusionar directorios completos. Esta captura muestra &kdiff3; durante la fusión de un directorio:

### Más características

#### Visor de diferencias línea a línea y caracter a caracter

Utilizando las posibilidades que permite una pantalla gráfica a color &kdiff3; muestra exactamente cuál es la diferencia. Cuando haga algunas revisiones de código, obtendrá algo como esto.

#### Ver diferencias de espacios en blanco de un vistazo

Los espacios y tabulaciones que difieren se muestran visiblemente. Cuando las líneas difieren solo en la cantidad de espacios en blanco puede verse de un vistazo en la columna resumen en la parte izquierda (no más preocupaciones cuando se hagan cambios en el sangrado).

#### Triple diferencia

Analiza tres archivos y ve dónde está la diferencia.

Las ventanas izquierda/central/derecha se llamarán A/B/C y tendrán los colores azul/verde/gris respectivamente.

Si un archivo es igual y el otro es diferente en una línea, el color mostrado en el archivo será diferente. El color rojo significa que ambos archivos son diferentes.

#### Fusión cómoda de dos o tres archivos de entrada

&kdiff3; puede utilizarse para fusionar dos o tres archivos de entrada y hacer la fusión todo lo automática que sea posible. El resultado se presentará en una ventana editable donde se podrán resolver la mayor parte de los conflictos con una pulsación de ratón: Seleccione los botones A/B/C de la barra de botones para seleccionar la fuente que se utilizará. También podrá seleccionar más de una fuente. Como la ventana de salida es un editor aunque los conflictos puedan necesitar correcciones más profundas, éste hecho puede resolverse aquí sin ninguna herramienta adicional.

#### Y ...

- Navegación rápida a través de los botones.

- Una pulsación del ratón en la columna resumen sincronizará todas las ventanas para mostrar la misma posición.

- Seleccione una copia desde cualquier ventana y péguela en la ventana de fusión del resultado.

- Columna de vista general que muestra los cambios y conflictos.

- Los colores pueden ajustarse a sus preferencias.

- Tamaño de pestaña ajustable.

- Opción de insertar espacios en lugar de tabuladores.

- Abrir archivos cómodamente a través de un diálogo o especificando archivos en la línea de órdenes.

- Buscar cadenas en todas las ventanas de texto. Buscar (&Ctrl;F) y Buscar siguiente (F3).

- Mostrar los números de línea.

- Pegar el portapapeles y arrastrar texto a una ventana de diferencias.

- Transferencia de red a través de KIO.

- Puede utilizarse como visor de diff en KDevelop 3.

- Ajuste de línea para las líneas largas.

- Soporte para Unicode, UTF-8 y otras codificaciones.

- Soporte para idiomas que van de derecha a izquierda.

## Documentación de la comparación y fusión de archivos

### Opciones de la línea de órdenes

#### Comparar 2 archivos:

    kdiff3 archivo1 archivo2

#### Fusionar 2 archivos:

    kdiff3 archivo1 archivo2 -m
    kdiff3 archivo1 archivo2 -o archivosalida

#### Comparar 3 archivos:

    kdiff3 archivo1 archivo2 archivo3

#### Fusionar 3 archivos:

    kdiff3 archivo1 archivo2 archivo3 -m
    kdiff3 archivo1 archivo2 archivo3 -o archivosalida

Tenga en cuenta que archivo1 será tratado como base de archivo2 y archivo3.

#### Caso especial: Archivos con el mismo nombre

Si todos los archivos tienen el mismo nombre pero están en directorios diferentes, puede reducir el tipo de trabajo especificando el nombre del archivo sólo para el primer archivo. &eg;:

    kdiff3 directorio1/nombrearchivo directorio2 directorio3

#### Línea de órdenes para iniciar la comparación o fusión de un directorio:

Es muy similar, pero ahora sobre directorios.

    kdiff3 directorio1 directorio2
    kdiff3 directorio1 directorio2 -o directoriodestino
    kdiff3 directorio1 directorio2 directorio3
    kdiff3 directorio1 directorio2 directorio3 -o directoriodestino

Para la comparación y fusión de directorios puede continuar leyendo aquí.

#### Para obtener más información sobre las opciones de la línea de órdenes utilice:

    kdiff3 --help
    Opciones:
      -m, --merge               Fusiona la entrada.
      -b, --base archivo        Archivo base explícito. Por compatibilidad con ciertas herramientas.
      -o, --output archivo      Archivo de salida. Supone -m. Ejem.: -o nuevoarchivo.txt
      --out archivo             Archivo de salida, de nuevo. (Por compatibilidad con ciertas herramientas.)
      --auto                    Sin interfaz si todos los conflictos se resuelven de forma automática. (Necesita -o archivo)
      --qall                    No resuelve los conflictos automáticamete. (Por compatibilidad...)
      --L1 alias1               Reemplazo de nombre visible para la entrada del archivo 1 (base).
      --L2 alias2               Reemplazo de nombre visible para la entrada del archivo 2.
      --L3 alias3               Reemplazo de nombre visible para la entrada del archivo 3.
      -L, --fname alias         Reemplazo de nombre visible alternativo. Proporcione éste una vez para cada entrada.
      -u                        Sin efecto. Por compatibilidad con ciertas herramientas.

### Diálogo abrir

Como se pueden seleccionar varios archivos de entrada, el programa tiene un diálogo de apertura especial:

El diálogo abrir le permite editar los nombres de los archivos manualmente, seleccionando un archivo a través del navegador de archivos (Archivo...) o permitir la elección de los archivos recientes a través de las listas desplegables. Si abre el diálogo nuevamente, el nombre actual continúa ahí. El tercer archivo de entrada no es necesario. si la entrada para «C» permanece vacía, solo se efectuará el análisis de diferencia de dos archivos.

Puede seleccionar un directorio a través de Dir... Si se especifica un directorio para A entonces comienza la comparación/fusión de directorios. Si en A especifica un archivo pero en B,C o en la salida se especifica un directorio, &kdiff3; utiliza el nombre del archivo de A en los directorios especificados.

Si está seleccionado Fusionar, la línea de Salida será editable. Pero no se necesita especificar el nombre de archivo de salida de forma inmediata. Puede postponerlo hasta que lo guarde.

El botón Configurar... abre el diálogo de opciones, de forma que pueda seleccionar las opciones antes de realizar el análisis.

### Pegar y soltar la entrada

Algunas veces deseará comparar partes de un texto que no sea propiamente un archivo. &kdiff3; también le permite pegar texto desde el portapapeles a la ventana de entrada de diff que tenga el foco. El análisis de las diferencias se producirá inmediatamente. En el diálogo abrir no necesitará especificar archivos entonces, ciérrelo con el botón Cancelar.

También podrá utilizar arrastrar y soltar: Arrastre un archivo desde un administrador de archivos o seleccione texto en un editor y arrástrelo a la ventana de entrada.

¿Cuál es la idea? Algunas veces un archivo contiene dos funciones similares, pero comprobar las similitudes es un esfuerzo enorme si primero debe crear los archivos y luego cargarlos. Ahora bastará con copiar, pegar y comparar las secciones relevantes.

En estos momentos no podrá arrastrar nada desde &kdiff3;. Solo está soportado en la ventana de entrada diff.

Algunos editores todavía interpretan arrastrar y soltar en otro programa como cortar (en lugar de copiar) y pegar. En este caso sus datos originales se perderían.

### Interpretar la información en las ventanas de entrada

En la parte superior de cada ventana de texto se encuentra la «línea de información». Las líneas de información de las ventanas de entrada contienen una letra A, B o C, el nombre del archivo y el número de línea de la primera línea visible en la ventana (recuerde que la ventana C es opcional). Cada línea de información aparecerá de diferente color (Si las rutas son demasiado largas para ajustarlas, puede mover el ratón sobre la línea de información y se le mostrará un mensaje con el nombre completo).

Las tres ventanas de entrada tienen asignadas las letras A, B y C, A tiene color azul, B verde y C magenta (estos son los valores predeterminados, pero puede cambiarlos en el menú Preferencias).

Cuando se detecta una diferencia el color mostrado en el archivo de entrada cambia. Cuando los dos archivos presentan diferencias el color utilizado para expresar esto es rojo de manera predeterminada (Color de conflicto en las preferencias). Este esquema de color es especialmente práctico en el caso de que tenga tres archivos de entrada, tal y como se verá en la próxima sección (Fusionar).

A la izquierda de cada texto se encuentra la «columna resumen». Si las diferencias se producen en una línea la columna resumen muestra el color correspondiente. Si la diferencia es sólo de espacios en blanco se marca el resumen. Para los lenguajes de programación en los que los espacios no son importantes es práctico para apreciar de un vistazo si se modificó algo importante. (En C/C++ los espacios en blanco sólo son interesantes en el interior de las cadenas, comentarios, para el preprocesador y en otra serie de extrañas situaciones).

La línea vertical que separa la columna resumen y el texto se interrumpe si el archivo de entrada no tiene líneas. Cuando se activa el ajuste de línea, esta línea vertical aparecerá punteada en las líneas ajustadas.

En el lado derecho podemos encontrar la columna «visión general», a la izquierda de la barra de desplazamiento. Muestra la columna de resumen comprimida de la entrada A. todas las diferencias y conflictos se pueden apreciar de un vistazo. Cuando solo se utilizan dos ventanas de entrada, todas las diferencias aparecerán en rojo, ya que cada diferencia supondrá un conflicto. Un rectángulo negro marca la parte visible de las entradas. Para los archivos con entradas muy largas, cuando el número de líneas es más grande que la altura de la columna visión general en pixels, varias líneas de entrada compartirán una línea de visión general. Un conflicto tendrá más prioridad que las simples diferencias, que a su vez tendrán prioridad sobre lo no cambiado, de forma que no se pierdan las diferencias o los conflictos aquí. Pulsando sobre la columna de visión general se mostrará el correspondiente texto.

### Fusionar y la ventana del editor de la salida fusionada

La ventana del editor de la salida fusionada (bajo las ventanas de la entrada de diferencias) también tiene una línea de información sobre ella que mostrará Salida, el nombre del archivo y [Modificado] si edita algo. Normalmente contendrá texto que podrá fusionarse automáticamente con facilidad, pero algunas veces también contendrá conflictos.

El guardado está desactivado hasta que se hayan resuelto todos los conflictos (utilice los botones Ir al conflicto anterior/siguiente sin resolver para encontrar los conflictos que falten).

Con sólo dos archivos de entrada, cada diferencia es también un conflicto que debe resolverse manualmente.

Con tres archivos de entrada el primer archivo se utiliza como base, mientras que el segundo y tercer archivos de entrada contienen las modificaciones. Si en cualquier línea solo tienen cambios la entrada B o la C pero no ambas se seleccionará automáticamente la fuente cambiada. Solo cuando B y C tengan cambios en las mismas líneas, la herramienta detectará un conflicto que debe resolverse manualmente. Cuando B y C sean iguales, pero diferentes a A, se seleccionará C.

El editor de la salida de fusionado también tiene una columna resumen a su izquierda. Mostrará la letra de la entrada de la que se seleccionó la línea, o nada si las tres fuentes son iguales en esa línea. Para los conflictos mostrará un signo de interrogación ? y la línea mostrará <Conflicto de fusionado>, en rojo. Puesto que resolver los conflictos línea a línea es muy arduo, las líneas se agruparán en grupos que tengan las mismas diferencias y conflictos característicos. Pero los conflictos causados solo por espacios en blanco se separarán de los conflictos no causados por espacios en blanco para facilitar el fusionado de los archivos cuando el sangrado cambia en muchas líneas.

Cuando se pulsa en la columna resumen con el botón izquierdo del ratón en la ventana a la que pertenezca este grupo, se seleccionarán todas las ventanas y se mostrará el comienzo de este grupo (ésto implica un salto automático en la posición de la ventana si el principio del grupo no se encuentra visible). El grupo se convierte en el «grupo actual». Se resalta con la «gama (diff) de color del fondo actual» y aparecerá una barra negra en la parte izquierda del texto.

Vea que los botones de selección de entradas contienen las letras A, B y C en la barra de botones bajo la barra de menú. Cuando pulse en cualquiera de los botones de selección, las líneas de éste se añadirán al final del grupo seleccionado, si este grupo no contenía la fuente antes. En otro caso las líneas de esta entrada se eliminarán.

Además, podrá editar cualquier línea directamente. La columna resumen mostrará m por cada línea que haya modificado.

Algunas veces, cuando una línea se elimina bien por el fusionado o por la edición manual y no hay más líneas en este grupo, aparecerá el texto `<Sin línea fuente>`. Se coloca en lugar del grupo de forma que pueda cambiar de idea y seleccionar de nuevo la fuente. Este texto no aparecerá en el archivo guardado o en cualquier selección que copie y pegue.

El texto «<Conflicto de fusionado>» aparecerá en el portapapeles si copia y pega texto que lo contenga.

El fusionado normal se inicia resolviendo los conflictos sencillos automáticamente. Pero el menú Fusionar proporciona algunas acciones para otras necesidades habituales. Si ha seleccionado la misma fuente para más conflictos, podrá seleccionar «A», «B» o «C» en cualquier sitio, o solo para los conflictos pendientes de resolver, o para los conflictos sin resolver que sean debidos a espacios. Si desea decidir cada delta por sí mismo, puede Establecer deltas a conflictos. O si desea volver a las elecciones automáticas de &kdiff3; seleccione «Resolver automáticamente conflictos simples». &kdiff3; reiniciará el fusionado. Para las acciones que cambien sus modificaciones anteriores KDiff3 le pedirá confirmación antes de realizarlo.

Cuando seleccione fuente para los conflictos de espacios en blanco sin resolver y las opciones Ignorar números o Ignorar comentarios C/C++ los cambios en los números o en los comentarios serán tratados también como espacios en blanco.

### Navegación y edición

La mayor parte de la navegación puede realizarse con las barras de desplazamiento y el ratón, pero también puede navegar con las teclas. Si pulsa en cualquier ventana puede utilizar los botones Flecha izquierda, Flecha derecha, Flecha arriba, Flecha abajo, Página arriba, Página abajo, Inicio, Fin, &Ctrl;Inicio, &Ctrl;Fin tal y como lo haría en otros programas. La columna vista general situada al lado de la barra vertical de desplazamiento en los archivos de entrada también puede utilizarse para navegar pulsando sobre ella.

También puede utilizar la rueda del ratón para desplazarse arriba y abajo.

En el editor de la salida de fusionado también puede utilizar las otras teclas para la edición. Puede cambiar entre los modos insertar y sobreescribir con la tecla Insertar (el modo predeterminado es insertar).

Una pulsación del &LMB; en la columna resumen sincronizará todas las ventanas para mostrar el inicio del mismo grupo de líneas (tal y como se explicaba en la sección «Fusionado»).

La barra de botones también contiene siete botones de navegación con los que podrá saltar a la diferencia actual/primera/última, a la siguiente/anterior diferencia (&Ctrl;Flecha abajo/&Ctrl;Flecha arriba), al siguiente/anterior conflicto (&Ctrl;Página abajo/&Ctrl;Página arriba), o al siguiente/anterior conflicto sin resolver. Tenga en cuenta que para &kdiff3; un «conflicto» que no se pudo resolver automáticamente al comienzo del fusionado continúa siendo un «conflicto» aunque se haya resuelto. De aquí la necesidad de distinguir los «conflictos sin resolver»

También existe el botón Automáticamente ir al conflicto siguiente sin resolver después de una selección origen (avance automático). Si activa esto, cuando se seleccione una fuente &kdiff3; saltará automáticamente al siguiente conflicto sin resolver. Esto puede ayudarle cuando desee seleccionar una sola fuente. Cuando necesite ambas fuerte, o desee editar después de la selección, probablemente querrá desactivar esto. Antes de continuar con el siguiente conflicto sin resolver &kdiff3; muestra el resultado de su elección durante un momento. Este retardo es ajustable en las preferencias Diff & Fusión: Puede especificar en Retardo auto avanzado en milisegundos un valor entre 0 y 2.000.

¿Cansado de tanta pulsación? Utilice un «Retardo auto avanzado» pequeño y los accesos rápidos &Ctrl;1, &Ctrl;2 y &Ctrl;3 para seleccionar los archivos A, B o C para muchos conflictos.

### Seleccionar, copiar y pegar

Las ventanas de entrada no muestran un cursor, por ello las selecciones se hacen pulsando el &LMB; al inicio, manteniendo pulsado el botón del ratón y moviéndose al final, momento en el que soltará el botón del ratón. También puede seleccionar una palabra con una doble pulsación. En la salida del editor de fusionado puede realizar la selección a través del teclado manteniendo pulsado el botón &Shift; y navegando con las teclas de cursor.

Para copiar al portapapeles debe pulsar el botón Copiar (&Ctrl;C o &Ctrl;Insertar). Pero también existe la opción «Auto copiar selección». Si está activado, todo lo que seleccione se copiará inmediatamente y no necesitará realizar la copia explícitamente. Ponga atención cuando lo utilice ya que el contenido del portapapeles puede destruirse accidentalmente.

Cortar (&Ctrl;X o &Shift;Borrar) copia el portapapeles, borra el texto seleccionado y Pegar (&Ctrl;V o &Shift;Insertar) inserta el texto en el portapapeles en la posición del cursor o sobre la selección actual.

### Guardar

Guardar solo estará permitido cuando se hayan resuelto todos los conflictos. Si el archivo ya existe y la opción «Archivos de copia de seguridad» está activada el archivo existente se renombrará con una extensión `.orig`, pero si ya existe un archivo se borrará. Cuando salga o inicie otro análisis de diferencias y los datos no se hayan guardado, &kdiff3; le preguntará si desea Guardar, Cancelar o Continuar sin guardar. &kdiff3; no captura ninguna señal. Por eso si ejecuta «kill» sobre &kdiff3; sus datos se perderán.

Los finales de línea se guardan de acuerdo con el método utilizado por el sistema operativo. Para Unix cada línea termina con un caracter de nueva línea `\n`, mientras que para los sistemas basados en &Windows; cada línea termina con un retorno de carro + un nueva línea `\r\n`. &kdiff3; no conserva los finales de línea de los archivos de entrada, lo que significa que no debería utilizar &kdiff3; con archivos binarios.

### Buscar cadenas

Puede buscar una cadena en cualquier ventana de texto de &kdiff3;. La orden Buscar... (&Ctrl;F) en el menú Editar abre un diálogo que le permite especificar la cadena a buscar. La búsqueda siempre comenzará en la parte superior. Utilice la orden Buscar siguiente (F3) para buscar la siguiente aparición. si selecciona la búsqueda en varias ventanas se comenzará a buscar en la primera ventana de arriba hacia abajo antes de iniciar la búsqueda en la parte superior de la siguiente ventana, &etc;

### Opciones

Las opciones y la lista de archivos recientes se guardarán cuando salga del programa, y se recargarán cuando lo inicie (Menú Preferencias Configurar KDiff3...).

#### Fuente

Seleccione un tipo de letra de ancho fijo (en algunos sistemas este diálogo puede mostrar tipos de letra de ancho variable, pero no debería utilizarlas).

Fuente cursiva para deltas:

  Si selecciona esto, las diferencias de texto se dibujarán con la versión cursiva del tipo de letra. Si el tipo de letra no soporta cursiva, no hará nada.

#### Colores

Color del primer plano:

  Habitualmente negro.

Color de fondo:

  Habitualmente blanco.

Color del fondo de diff:

  Habitualmente gris claro.

Color A:

  Habitualmente azul oscuro.

Color B:

  Habitualmente verde oscuro.

Color C:

  Habitualmente magenta oscuro.

Color de conflicto:

  Habitualmente rojo.

Rango actual de color de fondo:

  Habitualmente amarillo claro.

Rango actual de color de fondo de diff:

  Habitualmente amarillo oscuro.

En sistemas que solo tengan 16 ó 256 colores algunos de ellos no estarán disponibles en su forma exacta. En aquellos sistema el botón Predeterminados seleccionará un color puro.

#### Preferencias del editor

El tabulador inserta espacios:

  Si está desactivado y pulsa la tecla tabulador, se insertará un caracter de tabulación, sino se insertará la cantidad adecuada de caracteres.

Tamaño del tabulador:

  Se puede ajustar para sus necesidades. El valor predeterminado es 8.

Auto indentación:

  Cuando pulsa &Enter; o Return el sangrado de la línea anterior se utiliza para la nueva línea.

Auto-copiar selección:

  Cada selección se copia inmediatamente al portapapeles de forma que no necesitará copiarlo explícitamente.

Estilo línea final:

  Al guardar puede seleccionar qué estilo de línea prefiere. El valor predeterminado es la elección habitual para el sistema operativo utilizado.

Utilizar codificación local:

  Para mostrar caracteres extranjeros. Intente cambiar ésto si algunos caracteres de su idioma no se muestran correctamente.

#### Preferencias de Diff y fusión

Cuando se comparan archivos, &kdiff3; primero intenta hacer coincidir las líneas que sean iguales en todos los archivos de entrada. Solo durante este paso se ignorarán los espacios en blanco. El segundo paso compara cada línea. En este paso los espacios en blanco no se ignorarán. Los espacios en blanco tampoco se ignorarán durante la fusión.

Conservar el retorno de carro

  Algunos editores (en algunos sistemas) guardan los caracteres de retorno de carro `\r` y de línea siguiente `\n` al final de la línea, mientras que otros solo guardan el de línea siguiente `\n`. Normalmente &kdiff3; ignora el retorno de carro, pero a pesar de que debido a ello no tengan el mismo tamaño parecerán iguales si se comparan juntos. Cuando se activa esta opción, los caracteres de retorno de carro se harán visibles, pero se tratarán como espacios en blanco. Esta opción debería estar desactivada durante el mezclado. El valor predeterminado es apagado.

Ignorar números:

  De forma predeterminada estará desactivado. Los caracteres numéricos («`0-9`», `.`», «`-`») se ignorarán en la primera parte del análisis en la que se efectuará la coincidencia de líneas. Sin embargo en el resultado las diferencias sí se mostrarán, pero serán tratados como espacios en blanco.

Ignorar comentarios de C/C++:

  De forma predeterminada estará desactivado. Los cambios en los comentarios se tratarán como cambios de espacios en blanco.

Ignorar mayúsculas:

  De forma predeterminada estará desactivado. Las diferencias de mayúsculas de los caracteres (como entre «`A`» y «`a`») serán tratadas como los cambios de los espacios en blanco.

Comando del preprocesador:

  Vea la siguiente sección.

Comando de preprocesador de combinación de línea:

  Vea la siguiente sección.

Intentar más a fondo:

  Intenta encontrar más a fondo una delta más pequeña (de forma predeterminada estará activada). Debería ser efectivo para archivos grandes y complicados. Y lento para archivos muy grandes.

Retardo auto avanzado (ms):

  Cuando está activado el modo de «auto avanzado» aquí se especifica durante cuanto tiempo se mostrará el resultado de la selección antes de saltar al siguiente conflicto sin resolver.

Fusionar por omisión espacios en blanco de dos/tres archivos:

  Resuelve automáticamente todos los conflictos de los espacios en blanco seleccionando el archivo especificado (el modo predeterminado es el manual). Práctico si los espacios no son realmente importantes en los archivos. Si solo necesita ésto ocasionalmente mejor utilice Seleccionar A/B/C para todos conflictos de los espacios en blanco sin resolver en el menú Fusionar. Tenga en cuenta que si ha activado Ignorar números o Ignorar comentarios de C/C++ esta autoelección también se aplica a los conflictos en los números y en los comentarios.

#### Fusión de directorios

Estas opciones están relacionadas con la exploración del directorio y el manejo del fusionado: Vea la Comparación/fusión de directorios de documentos para obtener los detalles.

También existe una opción relevante para guardar archivos sencillos:

Archivos de copia de seguridad:

  Cuando se guarde una archivo y ya exista una versión antigua, la versión original se renombrará con una extensión `.orig`. Si ya existía un archivo de copia de seguridad antigua con la extensión `.orig` se borrará.

#### Configuraciones regionales

Idioma:

  Ajusta el idioma de la interfaz de usuario. Cambiar esta opción no afectará a la ejecución del programa. Tendrá que salir y reiniciar &kdiff3; para que el cambio tenga efecto (esta opción no está disponible en la versión de &kde; de &kdiff3; porque el idioma se ajusta de forma global en las preferencias de &kde;).

Usar la misma codificación para todo:

  Las siguientes opciones de codificación se pueden ajustar de forma separada para cada elemento, o si esta opción está activada, todos los valores tomarán el primer valor.

Codificación local:

  Sobre los selectores de código aparece una nota que le indica cuál es la codificación local (no es ajustable, ya que se utiliza para informarle de su codificación en caso de que no la conozca, y necesite seleccionarla).

Codificación de archivo para A/B/C:

  Ajusta la codificación para los archivos de entrada. Esto tiene efecto en la interpretación de los caracteres especiales. Como puede ajustar cada codificación por separado puede comparar y fusionar archivos guardados con diferentes codificaciones.

Codificación de archivo para la salida de la fusión y guardar:

  Cuando haya editado un archivo, podrá ajustar qué codificación se utilizará al guardarse en el disco.

Codificación de archivo para los archivos del preprocesador:

  Cuando defina el preprocesador puede que no sea capaz de operar con su codificación (ejem: Sus archivos son de unicode de 16 bit y su preprocesador solo puede utilizar ascii de 8 bit). Con esta opción puede definir la codificación de la salida del preprocesador.

Idioma de derecha a izquierda:

  Algunos idiomas se escriben de derecha a izquierda. Cuando esta opción está activada, &kdiff3; dibuja el texto de derecha a izquierda en las ventanas de entrada de diff y en la ventana de la salida del fusionado. Tenga en cuenta que si inicia &kdiff3; con la opción de línea de órdenes `--reverse` toda la distribución se hará de derecha a izquierda también (ésta es una característica proporcionada por &Qt;). Este manual se escribió asumiendo que «Idioma de derecha a izquierda» o invertir distribución están desactivados. Por ello, algunas referencias a «izquierda» o «derecha» se reemplazarán por sus respectivas homólogas si utiliza estas opciones.

#### Varios

Estas opciones y acciones están disponibles en los menús o en la barra de botones.

Mostrar números de líneas:

  Puede seleccionar si los números deberían mostrarse en los archivos de entrada.

Mostrar caracteres espacio y tabulador por diferencias:

  Algunas veces los espacios visibles y los tabuladores molestan. Puede desactivarlos.

Mostrar espacio en blanco:

  Desactívelo para suprimir cualquier resaltado o cambio de «solo espacio en blanco» en el texto o en las columnas de vista general (tenga en cuenta que ésto también se aplicará a los cambios en los números y comentarios si están activadas las opciones Ignorar números o «Ignorar comentarios C/C++»).

Opciones de la vista general:

  Estas elecciones están disponibles cuando compara tres archivos. En el modo normal todas las diferencias se muestra en un color codificado en la columna de vista general. Pero algunas veces puede estar interesado en las diferencias entre solo dos de los tres archivos. Seleccionando vista A vs. B, A vs. C o B vs. C se mostrará una segunda columna de vista general con la información requerida situado al lado de la visión general normal.

Ajuste de palabras en las ventanas diff:

  Ajusta las líneas cuando su longitud excede del ancho de una ventana.

Mostrar ventana A/B/C:

  Algunas veces deseará utilizar mejor el espacio de la pantalla para las líneas largas. Oculte las ventanas que no sean importantes (en el menú Ventanas).

Cambiar orientación de división:

  Cambia entre las ventanas diff mostrándolas una cerca de la otra (A a la izquierda de B, y a la izquierda de C) o una sobre otra (A sobre B y sobre C). También debería servir de ayuda para las líneas largas (en el menú Ventanas).

Iniciar fusión rápida:

  Algunas veces puede estar viendo las deltas y decidir fusionarlas. Fusionar el archivo actual en el menú Directorio también funcionará si solo compara dos archivos. Una simple pulsación inicia la fusión y utiliza el nombre de archivo del último archivo de entrada como nombre de archivo predeterminado (cuando se utiliza esto para reiniciar una fusión, se conservará el nombre de archivo de la salida).

#### Configurar accesos rápidos de teclado

En estos momentos solo la versión para &kde; soporta accesos rápidos de teclado configurables por el usuario (Preferencias Configurar accesos rápidos...).

### Órdenes del preprocesador

&kdiff3; soporta dos opciones para el preprocesador.

Comando del preprocesador:

  Cuando se lee cualquier archivo, se redirigirá a través de esta orden externa. Se podrá ver la salida de esta orden en lugar del archivo original. Puede escribir su propio preprocesador que cubra sus necesidades específicas. Utilice esto para cortar determinadas partes del archivo, o para corregir de forma automática el sangrado, &etc;.

Comando de preprocesador de combinación de línea:

  Cuando se lee cualquier archivo, se redirigirá a través de esta orden externa. Si se especifica una orden de preprocesado (ver a continuación), la salida del preprocesador será la entrada de la coincidencia de líneas del preprocesador. La salida solo se utilizará durante la fase de coincidencia de líneas durante el análisis. Puede escribir su propio preprocesador que cubra sus necesidades específicas. Cada línea de entrada tendrá la correspondiente línea de salida.

La idea es permitir al usuario gran flexibilidad durante la configuración del resultado de diff. Pero necesita un programa externo, y muchos usuarios no quieren escribirlo ellos. La buena noticia es que muchas veces `sed` o `perl` harán este trabajo.

Ejemplo: Simple comprobación de mayúsculas y minúsculas: Considere el archivo `a.txt` (6 líneas):

    aa
    ba
    ca
    da
    eafa

Y el archivo `b.txt` (3 líneas):

    cg
    dg
    eg

Sin un preprocesador las siguientes líneas se colocarán unas al lado de las otras:

    aa - cg
    ba - dg
    ca - eg
    da
    ea
    fa

Ésto no es lo que probablemente se desee ya que la primera letra contiene la información que es en realidad interesante. Para ayudar al algoritmo de coincidencia a ignorar la segunda letra utilizaremos una orden del preprocesador de líneas coincidentes para reemplazar `g` con `a`:

    sed 's/g/a/'

Con esta orden el resultado de la comparación sería:

    aa
    ba
    ca - cg
    da - dg
    ea - eg
    fa

Internamente el algoritmo de coincidencia ve los archivos después de ejecutar la línea de coincidencia del preprocesador, pero la pantalla del archivo permanecerá sin cambios (el preprocesador normal también cambiará los datos en la pantalla).

#### Lo básico de `sed`

Esta sección solo introduce algunas características muy básicas de `sed`. Para obtener más información vea info:/sed o http://www.gnu.org/software/sed/manual/html_mono/sed.html. Una versión precompilada para &Windows; puede encontrarse en http://unxutils.sourceforge.net. Tenga en cuenta que los siguientes ejemplo asumen que la orden `sed` se encuentra en algún directorio definido en la variable de entorno `PATH`. Si este no es el caso, deberá especificar la ruta completa absoluta de lo orden. Tenga en cuenta también que los siguientes ejemplos utilizan la comilla simple (`'`) que no funciona en &Windows;. En &Windows; debería utilizar las comillas dobles (`"`) en su lugar.

En este contexto solo se utiliza la orden de sustitución `sed`:

    sed 's/EXPRESIÓN-REGULAR/REEMPLAZO/PARÁMETROS'

Antes de utilizar una orden nueva dentro de &kdiff3;, debería comprobarlo primero en una consola. Aquí la orden `echo` es práctica. Ejemplo:

    echo abrakadabra | sed 's/a/o/'
    obrakadabra

Este ejemplo muestra una orden sed que tan solo reemplaza la primera aparición de «a» con «o». Si desea reemplazar todas las apariciones necesitará utilizar el parámetro `g`:

    echo abrakadabra | sed 's/a/o/g'
    obrokodobro

El símbolo «`|`» es la orden que transfiere la salida de la orden anterior a la entrada de la siguiente orden. Si desea comprobarlo con un archivo largo puede utilizar `cat` en los sistemas de tipo Unix o `type` en los sistemas de tipo &Windows;. `sed` realiza la sustitución para cada línea.

    cat nombre-archivo |sed opciones

#### Ejemplo para la utilización de `sed` en &kdiff3;

##### Ignorar otros tipos de comentarios

En estos momentos &kdiff3; solo entiende los comentarios C/C++. Utilizando la orden del preprocesador de la línea de coincidencias puede ignorar otros tipos de comentarios, convirtiendo los comentarios a C/C++.

Para ignorar los comentarios que comiencen con `#`, podría querer convertirlos en `//`. Tenga en cuenta que también puede activar las opción Ignorar comentarios C/C++ para que tengan efecto. Una orden de preprocesado podría ser:

    sed 's/#/\/\//'

Al igual que para `sed` los caracteres `/` tienen un significado especial, y es necesarío reemplazar el caracter `\` antes de cada `/` en la cadena de reemplazo. Algunas veces el `\` es necesario para añadir o eliminar un significado especial de ciertos caracteres. Las comillas simples (`'`) antes y después de la orden de sustitución son importantes, ya que sino el intérprete de órdenes intentará interpretar algunos caracteres especiales como `#`, `$` o `\` antes de pasarlos a `sed`. Tenga en cuenta que en &Windows; aquí necesitará utilizar las dobles comillas (`"`). &Windows; sustituye otros caracteres como `%`, por ello debería experimentar un poquito.

##### Sensibilidad de diff a mayúsculas y minúsculas

Use la siguiente orden de preprocesado para convertir todas las entradas a mayúsculas:

    sed 's/\(.*\)/\U\1/'

Aquí el «`.*`» es una expresión regular que incluye a todos los caracteres en la línea. El `\1` en la cadena de reemplazo hace referencia al texto que coincide con el primer par de `\(` y `\)`. La `\U` convierte el texto insertado a mayúsculas.

##### Ignorar las claves de control de versión

CVS y otros sistemas de control de versión utilizan algunas claves para insertar cadenas automáticamente generadas (info:/cvs/Keyword sustitución). Todos ellos siguen el modelo `$PALABRA-CLAVE generada texto$`. Ahora necesitaremos una orden de preprocesado que elimine solo el texto generado:

    sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/'

`\|` separan las posibles palabras clave. Podría querer modificar esta lista de acuerdo a sus necesidades. La `\` antes de `$` es necesario porque sino el `$` coincidiría con el final de la línea.

Mientras experimenta con `sed` puede llegar a entender y a gustarle las expresiones regulares. Son prácticas porque hay muchos programas que soportan cosas similares.

##### Ignorar números

Ignorar los números en realidad es una opción de construcción. Pero como en otros ejemplos, indica el aspecto que podría tener la orden de preprocesado.

    sed 's/[0123456789.-]//g'

Cualquier caracter situado entre `[` y `]` será una coincidencia y no se reemplazará con nada.

##### Ignorar ciertas columnas

Algunas veces una texto tiene un formato muy estricto y contiene columnas que desearía ignorar, mientras que otras columnas deseará conservarlas para el análisis. En el siguiente ejemplo las primeras cinco columnas (caracteres) se ignorarán, las siguientes diez se conservarán, otras cinco se ignorarán y el resto de la línea se conservará.

    sed 's/.....\(..........\).....\(.*\)/\1\2/'

Cada punto `.` coincide con cualquier caracter. El `\1` y `\2` en la cadena de reemplazo se refieren al texto coincidente en el primer y segundo par de `\(` y `\)` significando el texto conservado.

##### Combinar varias sustituciones

Algunas veces deseará aplicar varias sustituciones a la vez. Puede utilizar el punto y coma `;` para separarlas unas de otras.

    echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/'
    OBROKODOBRO

##### Utilizar `perl` en lugar de `sed`

En lugar de `sed` puede desear utilizar algo parecido a `perl`.

    perl -p -e 's/EXPRESIÓN-REGULAR/REEMPLAZO/PARÁMETROS'

Pero algunos detalles son diferentes en `perl`. Tenga en cuenta que donde `sed` necesita `\(` y `\)` `perl` requiere simplemente `(` y `)` sin estar precedido de `\`.

    sed 's/\(.*\)/\U\1/'
    perl -p -e 's/(.*)/\U\1/'

#### Orden de la ejecución de preprocesado

Los datos van pasando por todos los preprocesadores internos y externos en el siguiente orden:

- Preprocesador normal.

- Preprocesador de coincidencia de líneas.

- Ignorar mayúsculas (conversión a mayúsculas).

- Detección de comentarios C/C++.

- Ignorar números.

- Ignorar espacios en blanco.

Los datos después del preprocesador normal se conservarán para mostrarse y fusionarse. El resto de operaciones solo modificarán los datos para que los vea el algoritmo de coincidencia de líneas de diff.

En alguna ocasión cuando use el preprocesador normal se dará cuenta de que el preprocesador de coincidencia de líneas verá la salida del preprocesador normal como entrada.

#### Aviso

La orden de preprocesado suele ser muy práctica, pero como con cualquier opción que modifique su texto u oculte ciertas diferencias automáticamente, puede saltarse accidentalmente ciertas diferencias y en el peor de los casos destruir datos importantes.

Por esta razón durante un fusionado si &kdiff3; utiliza una orden de preprocesado normal le preguntará si desea desactivarla o no. Pero no se producirá ningún aviso si está activada la orden de preprocesado de líneas coincidentes. La fusión no se completará hasta que se resuelvan los conflictos. Si desactiva Mostrar espacios en blanco las diferencias eliminadas con la orden de preprocesado de líneas coincidentes también estarán visibles. Si el botón guardar continúa desactivado durante una fusión (porque aún existen conflictos), asegúrese de activar Mostrar espacios en blanco. Si no desea fusionar estas diferencias sin importancia de forma manual puede elegir Seleccionar [A|B|C] para todos los conflictos de espacios en blanco sin resolver en el menú Fusionar.

## 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 (&eg; 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 (&eg; 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 (&eg; 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 `?` (&eg; `*.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.

## Temas variados

### Transparencia de red a través de KIO

#### KIO-Slaves

&kde; soporta transparencia de red a través de los KIO-slaves. &kdiff3; lo utiliza para leer los archivos de entrada y para explorar directorios. Esto significa que puede especificar archivos y directorios locales y en recursos remotos a través de &URL;s.

Ejemplo:

    kdiff3 prueba.cpp  ftp://ftp.muylejos.org/prueba.cpp
    kdiff3 tar:/home/hacker/archivo.tar.gz/dir ./dir

La primera línea compara un archivo local con un archivo en un servidor &FTP;. La segunda línea compara un directorio con un archivo comprimido con un directorio local.

Otros KIO-slaves interesantes son:

- Archivos de la web (http:).

- Archivos desde el FTP (ftp:).

- Transferencia de archivos encriptados (fish:, sftp:).

- Recursos Windows (smb:).

- Archivos locales (file:).

Otras cosas posibles, aunque probablemente poco prácticas son:

- Páginas de manual (man:).

- Páginas de información (info:).

#### Cómo escribir &URL;s

Una &URL; tiene una sintaxis diferente comparada con las rutas de los archivos y directorios locales. Algunas cosas a considerar son:

- Una ruta puede ser relativa y puede contener `.` o `..` Ésto no es posible para &URL;s que son siempre absolutas.

- Los caracteres especiales deben escribirse «escapados» («#» se convertirá en «%23», los espacios se convertirán en «%20» y así sucesivamente). &eg; Un archivo con el nombre «/#foo#» tendrá la &URL; `file:///%23foo%23`.

- Cuando una &URL; no funcione tal y como esperaba, intente abrirla primero en &konqueror;.

#### Capacidades de los KIO-Slaves.

La transparencia de red tiene un inconveniente: No todos los recursos tienen las mismas capacidades.

Algunas veces esto es debido al sistema de archivos del servidor, otras al protocolo. Aquí tenemos una pequeña lista de restricciones:

- Algunas veces no soporta enlaces.

- O no hay forma de distinguir si un enlace apunta a un archivo o a un directorio. Siempre se asume un archivo (ftp:, sftp:).

- No siempre se puede determinar el tamaño del archivo.

- Soporte limitado para los permisos.

- No hay posibilidad de modificar los permisos o la hora, por ello los permisos o la hora de la copia puede diferir del original (vea la opción «Verificar tamaño»). La modificación de permisos o de la hora solo es posible en los archivos locales.

### Utilizar &kdiff3; como un KPart

&kdiff3; es un KPart. Actualmente implementa la interfaz KParts::ReadOnlyPart.

Su principal utilización es la de visor de diferencias en KDevelop. KDevelop siempre inicia primero el visor interno de diferencias. Para llamar a &kdiff3; pulse el &RMB; en la ventana de diferencias y seleccione Mostrar en KDiff3Part en el menú contextual.

&kdiff3; normalmente requiere dos archivos completos como entrada. Cuando se utiliza como una parte &kdiff3; asume que el archivo de entrada es un archivo de parches en formato unificado. &kdiff3; recupera el nombre del archivo original del archivo del parche. Al menos uno de los dos archivos debe estar disponible. &kdiff3; llamará a `patch` para volver a crear el segundo archivo.

En &konqueror; puede seleccionar un archivo de parche y seleccionar Previsualizar en KDiff3Part desde el menú contextual. Sea consciente de que esto no funcionará si no está disponible ninguno de los archivos originales, y no será fiable si hubo modificaciones en el(los) archivo(s) original(es) desde que se generó el parche.

Cuando se ejecute como una parte, &kdiff3; solo proporcionará la diferencia de dos archivos, una pequeñísima barra de herramientas y un menú. La fusión y comparación de directorios no está soportada.

## Preguntas y respuestas

&reporting.bugs; &updating.documentation;

¿Por qué se llama &kdiff3;?

Las herramientas llamadas KDiff y KDiff2 (ahora llamada &kompare;) ya existen. Por tanto &kdiff3; debería sugerir que incluye la fusión de forma similar a la herramienta `diff3` de la colección de herramientas Diff.

¿Por qué la he liberado bajo la GPL?

He utilizado programas GPL durante mucho tiempo y aprendí mucho echando un vistazo a muchas fuentes. Ésta es mi forma de dar las «gracias» a todos programadores que han hecho lo mismo.

Faltan algunos botones y funciones. ¿Que está pasando?

Compiló las fuentes, pero probablemente no especificó de forma correcta el parámetro «prefix» de &kde; en `configure`. De forma predeterminada configure intentará instalarlo en `/usr/local` pero &kde; no encuentra el archivo de recursos de la interfaz de usuario (&ie;, `kdiff3ui.rc`). El archivo `README` contiene más información sobre el parámetro «prefix» correcto.

Algunas líneas que son similares, pero no idénticas aparecen unas al lado de las otras, pero no siempre. ¿Por qué?

Las líneas que solo contienen una cantidad diferente de espacios se tratan «igual» al principio, de forma que solo una diferencia en un caracter que no sea un espacio en blanco hará que las líneas sean «diferentes». Si aparecen líneas similares unas al lado de las otras, en realidad es una coincidencia, y sucede algunas veces.

¿Por que se deben resolver todos los conflictos de fusionado antes de guardarlos?

Para cada sección ya sea igual o diferente el editor en la ventana de resultado de la fusión recordará su comienzo y su final. Ésto es necesario para que los conflictos puedan resolverse manualmente pulsando el botón de la fuente (A, B o C). Esta información se perderá cuando se guarde el texto y es demasiado complicado crear un formato de archivo especial que soporte el guardado y la restauración de toda la información.

¿Por qué el editor en la ventana de resultado no tiene una función «deshacer»?

Es demasiado esfuerzo por el momento. Siempre puede restaurar una versión a partir de una fuente (A, B o C) pulsando el botón respectivo. Para editar archivos grandes se recomienda utilizar otro editor.

Cuando eliminó texto, de repente aparece «<Sin línea fuente>» y no se puede borrar. ¿Qué significa y cómo puedo eliminarlo?

Para cada sección ya sea igual o diferente el editor en la ventana de resultado de la fusión recuerda dónde comienza y dónde termina. «<Sin línea fuente>» significa que no falta nada en una sección, ni siquiera un caracter de línea nueva. Esto puede suceder mientras realiza la fusión automática o mientras está editando. Ésto no es un problema, ya que no aparecerá en el archivo guardado. Si desea volver al archivo original seleccione la sección (pulse en la columna de resumen a la izquierda) y después pulse el botón de la fuente con los contenidos necesarios (A/B o C).

¿Por qué &kdiff3; no soporta resaltado de sintaxis?

&kdiff3; ya utiliza muchos colores para resaltar las diferencias. Más resaltado resultaría confuso. Utilice otro editor para esto.

Aquí hay mucha información, pero ¿su pregunta no está respondida?

Por favor, envíeme su pregunta. Aprecio todos los comentarios.

## Créditos y licencia

&kdiff3; - Herramienta de comparación y fusionado de archivos y directorios.

Programa copyright 2002-2005 Joachim Eibl joachim.eibl@gmx.de.

Algunas buenas ideas e informes de fallos me llegaron de colegas y de mucha gente a lo largo de la red ¡Gracias!

Documentación Copyright © 2002-2005 Joachim Eibl joachim.eibl@gmx.de.

Traducido por Santiago Fernández Sancho santi@est.unileon.es.

&underFDL; &underGPL;

## Instalación

### Cómo obtener &kdiff3;

Puede descargar la última versión de &kdiff3; de su página principal: http://kdiff3.sourceforge.net.

&kdiff3; también está disponible para otras plataformas. Vea la página principal para obtener más detalles.

### Requerimientos

Para utilizar adecuadamente todas las características de &kdiff3;, necesitará &kde; 3.1 o superior.

Para obtener información sobre cómo ejecutar &kdiff3; en otras plataformas sin &kde; vea la página principal.

Puede encontrar una lista de cambios en http://kdiff3.sourceforge.net/ChangeLog o en el archivo `ChangeLog` del paquete fuente.

### Compilación e instalación

&install.compile.documentation;

&documentation.index;