Fusionar i la finestra de l'editor per a la sortida de la fusió

La finestra de l'editor per a la sortida de la fusió (a sota de les finestres d'entrada de diferències) també té una línia d'informació a la part superior que mostra Sortida:, el nom del fitxer i l'etiqueta [Modificat] si heu editat quelcom. En general, contindrà una mica de text mitjançant les instal·lacions de fusió automàtica, però sovint també contindrà conflictes.

El desament estarà inhabilitat fins que es resolguin tots els conflictes! (Utilitzeu els botons Ves al conflicte no resolt anterior/següent per a trobar els conflictes restants).

Amb només dos fitxers d'entrada, cada diferència també és un conflicte que s'haurà de resoldre manualment.

Amb tres fitxers d'entrada, el primer fitxer es tractarà com a base, mentre que el segon i el tercer contindran les modificacions. Quan en qualsevol línia només hagin canviat l'entrada B o C però no totes dues, llavors se seleccionarà automàticament la font canviada. Només quan B i C hagin canviat en les mateixes línies, l'eina detectarà un conflicte que s'haurà de resoldre manualment. Quan B i C siguin iguals, però no iguals que A, llavors se seleccionarà C.

La columna del resum

La finestra de l'editor per a la sortida de la fusió també té una columna del resum a l'esquerra. Mostra la lletra de l'entrada des de la qual s'ha seleccionat una línia o res si les tres fonts són iguals en una línia. Per als conflictes, mostrarà un signe d'interrogació «?» i la línia mostrarà «<Conflicte de fusió>», tot en vermell. Com resoldre els conflictes línia per línia triga molt temps, les línies s'agruparan en grups que tenen la mateixa diferència i característiques del conflicte. Però només els conflictes d'espai en blanc se separaran dels conflictes que no són d'espai en blanc per a facilitar la fusió dels fitxers si el sagnat s'ha canviat en moltes línies.

Establir el grup actual, sincronitzar la fusió i la posició de la vista de les diferències

En fer clic a dins de la columna del resum amb el botó esquerre del ratolí a qualsevol finestra, el començament del grup que pertanyi a aquesta línia es mostrarà en totes les finestres. Aquest grup es convertirà en el «grup actual». Es ressaltarà amb l'opció Color de fons de les diferències de l'interval actual de l'element Integració en el diàleg de configuració i apareixerà una barra negra a la banda esquerra del text.

Triar les entrades A, B o C per als conflictes actuals i editar

La barra de botons que hi ha a sota de la barra de menús conté tres botons selectors d'entrada que contenen les lletres A, B i C. Feu clic al botó selector d'entrada per a inserir (o eliminar si ja està inserit) les línies des de la respectiva font. Per a triar les línies des de diverses entrades, feu clic als botons respectius en l'ordre necessari. Per exemple, si voleu que les línies de B apareguin a la sortida abans que les línies d'A, primer feu clic a B i després a A.

Si utilitzeu el botó Ves automàticament al conflicte no resolt següent després de seleccionar una font (vegeu la secció Avanç automàtic), haureu d'inhabilitar això abans d'escollir línies des de diverses entrades o si voleu editar les línies després de la vostra elecció. Altrament, el KDiff3 saltarà al següent conflicte després de triar la primera entrada.

Sovint és útil editar directament la sortida de la fusió. La columna del resum mostrarà «m» per a cada línia que s'ha modificat manualment. Quan, per exemple, les diferències estiguin alineades de manera que simplement triar les entrades no serà satisfactori, podreu marcar el text necessari i utilitzar copia i enganxa normalment per a col·locar-ho a la sortida de la fusió.

De vegades, quan s'elimina una línia, sigui per fusió automàtica o per edició, i no queden altres línies en aquest grup, llavors apareixerà el text «<La línia no és codi>» en aquesta línia. Només es tracta d'un marcador de posició per al grup per a quan pugueu canviar d'opinió i seleccionar de nou alguna font. Aquest text no apareixerà al fitxer desat ni en cap selecció que vulgueu copiar i enganxar.

El text «<Conflicte de fusió>» apareixerà en el porta-retalls si copieu i enganxeu algun text que contingui aquesta línia. Però així i tot aneu amb compte en fer-ho.

Triar l'entrada A, B o C per a tots els conflictes

La fusió normal començarà resolent automàticament els conflictes senzills. Però el menú Fusiona proporciona algunes accions per a altres necessitats habituals. Si heu de seleccionar la mateixa font per a la majoria dels conflictes, podreu triar A, B o C a tot arreu, o només per als conflictes restants sense resoldre, o per als conflictes d'espais en blanc sense resoldre. Si voleu decidir cada diferència d'espai, podreu fer Estableix les diferències d'espais com a conflictes. O si voleu tornar a les opcions automàtiques del KDiff3, seleccioneu Resol automàticament els conflictes senzills. Després, el KDiff3 tornarà a iniciar la fusió. Per a accions que canviïn les vostres modificacions anteriors, el KDiff3 demanarà la vostra confirmació abans de continuar.

Nota

En triar una font per als conflictes dels espais en blanc sense resoldre i s'emprin les opcions Ignora els números (tracta'ls com a espais en blanc) o Ignora els comentaris de C/C++ (tracta'ls com a espais en blanc) a l'element Diff en el diàleg de configuració són emprades de manera que els canvis en els números o comentaris també es tractaran com a espais en blanc.

Fusió automàtica de les paraules clau i l'historial en el control de versions (registre)

Molts sistemes per al control de versions admeten paraules clau especials al fitxer. (P. ex., «$Date$», «$Header$», «$Author$», «$Log$», etc.) Durant el registre, el sistema per al control de versions (VCS) canvia aquestes línies. Per exemple, «$Date$» es convertirà en «$Date: 2005/03/22 18:45:01 $». Atès que aquesta línia serà diferent en cada versió del fitxer, requerirà la interacció manual durant la fusió.

El KDiff3 ofereix la fusió automàtica per a aquests elements a l'element Fusiona en el diàleg de configuració. Per a les línies senzilles que coincideixen amb l'opció Fusiona automàticament amb l'expressió regular en tots els fitxers d'entrada, el KDiff3 triarà la línia des de B o, si està disponible, des de C. (A més, cal que les línies en qüestió s'alineïn en la comparació i la línia anterior no contingui cap conflicte). Aquesta fusió automàtica pot executar-se immediatament després que comenci una fusió (activeu l'opció Executa la fusió automàtica amb l'expressió regular a l'inici de la fusió) o més tard mitjançant l'element de menú FusionaExecuta la fusió automàtica amb l'expressió regular.

També s'admet la fusió automàtica per a l'historial del control de versions (també anomenat «registre»). La fusió automàtica de l'historial pot executar-se immediatament quan comença la fusió activant l'opció Fusiona l'historial del control de versions quan es comenci a fusionar a l'element Fusiona en el diàleg de configuració o més tard mitjançant l'element de menú FusionaResol automàticament els conflictes cronològics.

En general, l'historial del control de versions comença amb una línia que conté la paraula clau «$Log$». Aquesta haurà de coincidir amb l'opció Expressió regular per a l'inici de l'historial: a l'element Fusiona en el diàleg de configuració. El KDiff3 detectarà quines línies posteriors hi ha a l'historial mitjançant l'anàlisi dels caràcters principals que precedeixen a la paraula clau «$Log$». Si també apareixen els mateixos caràcters de «comentari principal» en les següents línies, també s'inclouran a l'historial.

Durant cada registre, el VCS escriu una línia única que especifica la informació de la versió, data i hora seguida de les línies amb els comentaris de l'usuari. Aquestes línies formen una entrada a l'historial. Aquesta secció de l'historial creixerà amb cada registre i les entrades més recents apareixeran a la part superior (després de la línia d'inici de l'historial).

Quan per al desenvolupament en paral·lel dos o més desenvolupadors registrin en una branca del fitxer, l'historial de fusió contindrà diverses entrades que apareixeran com a conflictes durant la fusió de les branques. Atès que fusionar-les pot tornar-se molt tediós, el KDiff3 ofereix suport amb dues estratègies possibles: simplement inserir a la part superior la informació de l'historial d'ambdós col·laboradors o ordenar la informació de l'historial amb una clau definida per l'usuari.

El mètode de simplement inserir totes les entrades és més fàcil de configurar. El KDiff3 només necessita un mètode per a detectar quines línies pertanyen a una entrada de l'historial. La majoria dels VCS insereixen una línia buida després de cada entrada de l'historial. Si no hi ha altres línies buides, aquest és un criteri suficient per al KDiff3. Simplement establiu una Expressió regular per a l'inici d'entrada de l'historial buida a l'element Fusiona en el diàleg de configuració. Si el criteri de línia buida no és suficient, podreu especificar una expressió regular per a detectar el començament de l'entrada de l'historial.

Cal tenir present que el KDiff3 eliminarà les entrades duplicades de l'historial. Si una entrada de l'historial aparèixer diverses vegades en l'historial d'un fitxer d'entrada, només quedarà una entrada a la sortida.

Si voleu ordenar l'historial, haureu d'especificar com s'haurà de construir la clau d'ordenació. Utilitzeu parèntesis a l'Expressió regular per a l'inici d'entrada de l'historial a l'element Fusiona en el diàleg de configuració per a agrupar parts de l'expressió regular que després s'utilitzaran per a la clau d'ordenació. Després, especifiqueu el Criteri d'ordenació de les claus per a l'inici de l'entrada de l'historial, especificant una llista separada per comes «,» dels números que es refereixen a la posició del grup en l'expressió regular.

A causa que això no és tan fàcil de fer immediatament, podreu provar i millorar les expressions regulars i la generació de les claus en un diàleg dedicat prement el botó Comprova les expressions regulars.

Exemple: suposem un historial similar a aquest:

/**************************************************************************
** HISTORY:    $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $
**
**     \main\integration_branch_12   2 Apr 2001 10:45:41   tom
**  Merged branch simon_branch_15.
**
**     \main\henry_bugfix_branch_7\1   30 Mar 2001 19:22:05   henry
**  Improved the speed for subroutine convertToMesh().
**  Fixed crash.
**************************************************************************/

La línia d'inici de l'historial coincideix amb l'expressió regular «.*\$Log.*\$.*». Després segueixen les entrades de l'historial.

La línia amb la paraula clau «$Log$» comença amb dos «*», després dels quals segueix un espai. El KDiff3 utilitzarà la primera cadena que no sigui un espai en blanc com a «comentari principal» i suposarà que l'historial acaba en la primera línia sense aquest comentari principal. En aquest exemple, l'última línia acaba amb una cadena que també comença amb dos «*», però en lloc d'un caràcter d'espai més segueix «*». Per tant, aquesta línia acaba l'historial.

Si no es requereix l'ordenació de l'historial, l'expressió regular de la línia d'inici per a l'entrada de l'historial podria tenir aquest aspecte. (Aquesta línia es divideix en dos perquè d'una altra manera no hi cabria).

\s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
 [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.*

Per a obtenir detalls sobre les expressions regulars, consulteu la documentació sobre expressions regulars. Recordeu que «\s» (amb «s» en minúscula) coincidirà amb qualsevol espai en blanc i «\S» (amb «S» en majúscula) coincidirà amb qualsevol espai que no sigui en blanc. En el nostre exemple, l'inici de l'entrada de l'historial conté primer la informació de la versió amb l'expressió regular «\\main\\\S+», la data que consisteix en el dia «[0-9]+», el mes «(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)» i l'any «[0-9][0-9][0-9][0-9]», l'hora «[0-9][0-9]:[0-9][0-9]:[0-9][0-9]» i finalment el nom d'inici de la sessió dels desenvolupadors «.*».

Recordeu que els caràcters en el «comentari principal» (a l'exemple «**») ja seran eliminats pel KDiff3 abans d'intentar fer coincidir, per tant, l'expressió regular començarà amb una coincidència per a cap o més caràcters d'espai en blanc «\s*». A causa que els caràcters de comentari poden diferir en cada fitxer (p. ex., a C/C++ s'utilitzen altres caràcters de comentari que en un script en Perl) el KDiff3 s'ocuparà dels caràcters de comentari principals i no haureu d'especificar-los a l'expressió regular.

Si necessiteu un historial ordenat. Llavors s'haurà de calcular la clau d'ordenació. Per això, les parts rellevants de l'expressió regular s'hauran d'agrupar entre parèntesis. (Els parèntesis addicionals també poden romandre si l'ordenació de l'historial està inhabilitada).

\s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
 ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*)

Els parèntesis ara contenen 1. informació de la versió, 2. dia, 3. mes, 4. any, 5. hora i 6. nom. Però si volem ordenar per data i hora, ens caldrà construir una clau amb els elements en un ordre diferent d'aparició: Primer l'any, seguit del mes, dia, hora, informació de la versió i nom. Per tant, l'ordre d'ordenació a especificar serà «4,3,2,5,1,6».

A causa que els noms dels mesos no són bons per a l'ordenació («Abr» seria el primer) el KDiff3 detectarà en quin ordre s'han donat els noms dels mesos i utilitzarà aquest nombre en el seu lloc («Abr» -> «04»). I si es troba un nombre pur, es transformarà en un valor de 4 dígits amb zeros a l'esquerra per a l'ordenació. Finalment, la clau d'ordenació resultant per a la primera línia d'inici de l'entrada de l'historial serà:

2001 04 0002 10:45:41 integration_branch_12   tom

Per a més informació, vegeu la secció Configuració de la fusió.