Авторське право © 2002-2007 Joachim Eibl
Авторське право © 2017-2019 Michael Reeves
KDiff3 — це інструмент для порівняння і об'єднання тек, який
порівнює і об'єднує два або три вхідних текстових файли або теки.
показує рядки і символи(!), що відрізняються,
надає можливість автоматичного об'єднання,
містить редактор для полегшення розв'язання конфліктів під час об'єднання,
забезпечує мережеву прозорість за допомогою KIO,
може підсвічувати або ховати зміни у пробілах або коментарях,
підтримує Unicode, UTF-8 та інші кодування текстів файлів,
може надсилати на друк різницю,
підтримує об'єднання за ключовими словами і журналом інструментів керування версіями.
У цьому документі описано KDiff3 версії 1.12.
Зміст
- 1. Вступ
- 2. Порівняння і об'єднання файлів
- Параметри командного рядка
- Діалогове вікно відкриття
- Вставка і визначення вхідних файлів скиданням
- Порівняння файлів і аналіз даних у вікнах виводу
- Об'єднання і вікно редактора виводу об'єднання
- Стовпчик резюме
- Визначення поточної групи і синхронізація позиції об'єднання і перегляду відмінностей
- Вибір вхідних даних з A, B або C для розв'язання поточного конфлікту і редагування
- Вибір даних A, B або C для всіх конфліктів
- Автоматичне об'єднання за ключовими словами системи керування версіями і журналу
- Навігація і редагування
- Вибір, копіювання і вставка
- Збереження
- Пошук рядків
- Друк
- Параметри
- Команди попередньо обробки
- 3. Порівняння і об'єднання тек за допомогою KDiff3
- 4. Різноманітні питання
- 5. Запитання і відповіді
- 6. Подяки і ліцензія
Існує декілька графічних інструментів для роботи з різницями (diff). Чому саме KDiff3? Давайте я, як автор, поясню, чому мною було написано цю програму.
Я почав писати KDiff3, оскільки мені доводилося виконувати складні операції з об'єднання версій. Потреба у такому об'єднанні виникає, коли декілька осіб працюють над однаковими файлами у проєкті. Процес об'єднання можна до певної міри автоматизувати, якщо інструмент об'єднання може працювати не лише з новими модифікованими файлами (які називаються «гілками»), але і з початковим файлом (який називається «базою»). Інструмент об'єднання автоматично обере всі зміни, які було внесено лише у одній гілці. Якщо декілька розробників вносять зміни до одних і тих самих рядків, інструмент об'єднання має визначити конфлікт, який слід буде розв'язати вручну.
У останньому випадку об'єднання ускладнюється тим, що один з розробників міг змінити багато рядків і виправити відступи у багатьох місцях. Інший розробник теж міг внести зміни у значну частину тексту того ж файла. Все це призводить до декількох конфліктів під час об'єднання.
Інструмент, яким я користувався раніше, показував лише змінені рядки, але не показував, які саме зміни сталися у цих рядках. Він також не міг показувати відомості щодо зміни лише відступів. Об'єднання було схоже на нічний жах.
Ось з цього я і розпочав свою роботу. Перша версія програми могла показувати різницю у символах рядків, а також різницю у пробілах. Пізніше було додано багато інших можливостей, які поширили перелік корисних можливостей програми.
Наприклад, якщо вам потрібно швидко порівняти якісь фрагменти тексту, ви можете скопіювати їх до буфера обміну інформацією і вставити до відповідних частин вікон порівняння.
Багато зусиль було покладено на реалізацію порівняння тек і можливість їх об'єднання. Втілення цієї можливості майже перетворило програму на повноцінний навігатор файлової системи.
Сподіваємось KDiff3 допоможе і вам. Нехай щастить!
Joachim Eibl (2003)
На цьому знімку показано різницю між двома текстовими файлами (за допомогою ранньої версії KDiff3):

Повністю підтримується трикомпонентне об'єднання. Ця можливість буде корисною, якщо двоє розробників незалежно змінюють код. Початковий файл (база) буде використано для того, щоб допомогти KDiff3 автоматично обирати правильні зміни. За допомогою вікна редактора об'єднання під вікнами різниці ви зможете розв'язувати конфлікти, — програма покаже вам результат. Ви навіть можете редагувати результат. На наступному знімку вікна показано три вхідних файли у процесі об'єднання:

Крім того KDiff3 допоможе вам порівнювати і об'єднувати цілі теки. На наступному знімку вікна показано KDiff3 у процесі об'єднання тек:

За допомогою виділення кольорами KDiff3 точно покаже вам відмінності у файлах. Якщо вам потрібно виконати значну кількість коду, ви оціните переваги, які надає ця можливість.

Різниця у пробілах і символах табуляції стає видимою. Якщо рядки відрізняються лише наявність (чи відсутністю) пробілів, це можна визначити з першого погляду на стовпчик резюме, розташований ліворуч. (Вам більше не потрібно буде перейматися випадками, коли розробник змінює лише відступи.)

За її допомогою можна аналізувати одразу три файли і бачити різницю між ними.
Ліве/середнє/праве вікна мають назви A/B/C і відповідні кольори: синій/зелений/малиновий.
Якщо певний рядок у одному з файлів збігається з базою, але відрізняється від бази у іншому файлі, колір відповідного рядка покаже вам, у якому саме файлі було внесено зміни. Червоний колір позначатиме рядки, які було змінено у обох файлах.

KDiff3 можна скористатися для об'єднання двох або трьох вхідних файлів, таке об'єднання буде за можливості виконано у автоматичному режимі. Результат буде показано у вікні, у якому ви зможете редагувати текст і розв'язувати більшість конфліктів одним клацанням кнопкою миші: вам достатньо буде натиснути одну з кнопок у вікнах A/B/C, на панелі кнопок, щоб вибрати джерело об'єднання, яке буде використано. Ви також можете вибрати одразу декілька джерел. Оскільки вікно результату є вікном редактора, у ньому можна розв'язати навіть конфлікти, які потребують подальшого виправлення, — вам не потрібно буде використовувати сторонні інструменти.
Швидка навігація за допомогою кнопок.
Наведення вказівника миші на стовпчик резюме з наступним клацанням лівою кнопкою миші призведе до синхронізації всіх вікон для показу єдиної позиції.
Вибір і копіювання з будь-якого вікна і вставка у вікно об'єднання результатів.
Стовпчик огляду, у якому буде показано розташування змін і конфліктів.
Можливість налаштування кольорів відповідно до ваших уподобань.
Можливість налаштування ширини табуляції.
Пункт для вставки пробілів замість символів табуляції.
Відкриття файлів у зручному режимі за допомогою діалогового вікна або визначення файлів з командного рядка.
Виконати пошук рядків у всіх текстових вікнах можна за допомогою пунктів меню → (Ctrl+F) і → (F3).
Показ номерів рядків для кожного рядка.
Вставка вмісту буфера обміну інформацією або перетягування тексту до вікна вводу різниці.
Прозорість у роботі з мережею через використання KIO.
Може бути використано для перегляду різниці у KDevelop 3.
Розбиття на підрядки довгих рядків.
Підтримка Unicode, UTF-8 та інших кодеків.
Підтримка для мов з напрямком письма справа ліворуч.
...
kdiff3файл1 файл2 файл3-m kdiff3файл1 файл2 файл3-oфайл_виводу
Зауважте, що файл1 буде вважатися базою щодо файл2 і файл3.
Якщо всі файли мають однакову назву, але розташовані у різних теках, ви можете зменшити об'єм інформації для введення, якщо вкажете назву файла лише для першого з файлів. Приклад:
kdiff3 тека1/назва_файла тека2 тека3
Дуже подібне до попереднього розділу, але тепер слід вказувати теки.
kdiff3тека1 тека2kdiff3тека1 тека2-oтека_призначенняkdiff3тека1 тека2 тека3kdiff3тека1 тека2 тека3-oтека_призначення
Докладніші відомості щодо порівняння тек або їх об'єднання можна прочитати у цьому розділі.
Щоб ознайомитися з переліком інших можливих параметрів командного рядка, виконайте команду
kdiff3 --help
Приклад виводу команди:
Параметри: -m, --merge Об'єднати вхідні елементи. -b, --base файл Явно вказати базовий файл. Призначено для сумісності з деякими інструментами. -o, --output файл Файл результату. Використовується разом -m. Наприклад: -o newfile.txt --out файл Знову ж таки, файл результату. (Призначено для сумісності з деякими інструментами.) --noauto Ігнорувати --auto і завжди показувати графічний інтерфейс. --auto Не показувати графічний інтерфейс, якщо всі конфлікти можна розв'язати автоматично. (Потрібен параметр -o файл) --L1 псевдонім1 Візуальний замінник назви вхідного файла 1 (бази). --L2 псевдонім2 Візуальний замінник назви файла 2. --L3 псевдонім3 Візуальний замінник назви файла 3. -L, --fname псевдонім Альтернативний візуальний замінник назви файла. Вкажіть його один раз для кожного вводу. --cs рядок Перевизначити параметр налаштування. Використовується один раз для кожного з параметрів. Приклад: --cs "AutoAdvance=1" --confighelp Показати список параметрів налаштування і поточних значень. --config файл Використати інший файл налаштування.
За допомогою параметра --cs ви можете вказати значення параметра налаштування, які інакше можна налаштувати лише за допомогою діалогових вікон налаштування. Але будьте уважні: якщо потім KDiff3, буде перервано, змінені значення буде збережено разом з іншими параметрами. За допомогою параметра --confighelp ви зможете переглянути назви всіх можливих параметрів та їх поточні значення.
За допомогою параметра --config ви можете вказати інший файл налаштування. Якщо ви часто користуєтеся KDiff3, за допомогою різних наборів налаштувань ви легко перемикатися між різними наборами налаштувань.
Багато користувачів бажають використовувати KDiff3 з деякими системами керування версіями. Але, якщо ця система керування версіями викликає KDiff3 за допомогою параметрів командного рядка, які не KDiff3 не розуміє, KDiff3 завершить роботу повідомленням про помилку. За допомогою параметрів інтеграції ви можете вказати параметри командного рядка, які KDiff3 має ігнорувати. Цей параметр буде показано у довідці з використання, як у цьому прикладі:
--щось_там Ігнорується. (Використовується користувачем.)
- Ігнорувати параметри командного рядка:
Список параметрів, відокремлених символом крапки з комою, «;». Якщо один з цих параметрів з'явиться у командному рядку, KDiff3 проігнорує його і виконає роботу без повідомлення про помилку. (Типовим є список
u;query;html;abort).
Якщо цього не буде достатньо, рекомендуємо вам написати скрипт оболонки, який виконає зміну параметрів.
Оскільки має бути передбачено можливість вибору вхідних файлів, у програмі є особливе діалогове вікно відкриття файлів:

Ви можете змінювати назви файлів вручну безпосередньо у діалоговому вікні відкриття файлів, там же можна вибрати файл за допомогою навігатора файлової системи () або вибрати нещодавно відкриті файли за допомогою спадних списків. Якщо ви повторно відкриєте це діалогове вікно, поточні назви залишатимуться на своїх місцях. Третій вхідний файл є необов'язковим. Якщо поле «C» залишатиметься порожнім, буде виконано аналіз відмінностей лише між двома файлами.
Крім того, ви може вибрати теку за допомогою кнопки . Якщо буде вказано теку для поля A, програма перейде у режим порівняння/об'єднання тек. Якщо у полі A буде вказано файл, у полях B, C або виводі буде вказано теку, KDiff3 використовуватиме назву файла з поля A для пошуку відповідного файла у вказаних теках.
Якщо буде позначено пункт Об'єднати, ви зможете змінити значення у рядку Вивід. Але вказувати назву файла виводу не обов'язково. Ви можете вказати її безпосередньо під час збереження.
За допомогою натискання кнопки можна відкрити діалогове вікно налаштування параметрів аналізу файлів.
Іноді виникає потреба у порівнянні фрагментів тексту, які не зберігаються у окремих файлах. У KDiff3 передбачено можливість вставки тексту з буфера обміну даними до вікна вхідних даних порівняння, яке перебуває у фокусі. Після вставки буде негайно виконано аналіз відмінностей. У разі подібного порівняння діалоговому вікні відкриття файлів вам не потрібно вказувати файлів: ви можете просто закрити це вікно за допомогою кнопки .
Крім того, ви можете скористатися перетягуванням зі скиданням: перетягніть файл з менеджера файлів або виділіть текст у редакторі, перетягніть його і скиньте у вікно вхідних даних для порівняння.
Навіщо це потрібно? Іноді у файлі містяться дві подібні функції, але перевірка їх подібності може бути досить марудною: слід спочатку створити два файли, потім завантажити їх для порівняння. У KDiff3 достатньо лише скопіювати, вставити і порівняти відповідні фрагменти файлів.
Примітка
У поточній версії KDiff3 не передбачено можливості перетягування фрагментів тексту з програми. Підтримується лише скидання до вікна вхідних даних.
Застереження
У деяких редакторах дія з перетягування зі скиданням до іншої програми призводить до вирізання (а не копіювання) виділеного тексту. У такому випадку можлива втрата початкових даних.

У верхній частині кожного з вікон ви побачите «інформаційний рядок». У інформаційних рядках вікон вхідних даних містяться літери A, B та C, придатне для редагування поле назви файла, кнопка навігації і номер першого з видимих рядків у вікні. (Зауважте, що вікно C не є обов'язковим.) Кожен з інформаційних рядків має власний колір.
Після вибору іншого файла за допомогою інструменту навігації або завершення редагування назви файла вам слід натиснути клавішу Enter. Програма завантажить новий файл і порівняє його з вже завантаженими файлами.
Трьом вікнам вхідних даних буде призначено літери A, B і C. Літері A відповідатиме синій колір, B — зелений, а C — малиновий. (Це типові кольори, але ви можете їх змінити за допомогою меню «Параметри».)
За виявлення відмінності програма змінюватиме колір вмісту вікна вхідних даних. Якщо дані відрізнятимуться у обох вікнах вхідних даних, їх, типово, буде позначено червоним кольором (Колір конфліктів у вікні Параметри). Подібна схема кольорів особливо корисна у випадку порівняння трьох файлів вхідних даних, як це можна буде бачити з наступного розділу (Об'єднання).
Ліворуч від тексту буде показано «стовпчик резюме». Якщо у рядку буде знайдено відмінності, його буде показано відповідним кольором. Якщо відмінності полягають лише у розташуванні пробілів, у стовпчик резюме буде розфарбовано як шахівницю. Якщо ви працюєте з файлами вихідних кодів мовами програмування, де розташування пробілів не є важливим, ви зможете з першого погляду визначити, чи було змінено щось суттєве. (У C/C++ пробіли мають значення лише у рядках, коментарях, у рядках, призначених для інструменту попередньої обробки, і у певних досить екзотичних випадках.)
Вертикальну лінію, що відокремлює стовпчик резюме від тексту буде розірвано, якщо у вхідному файлі немає відповідних рядків. Якщо увімкнено режим перенесення рядків програма показуватиме штриховану лінію у місцях перенесення рядків.
У правій частині області вікна, ліворуч від вертикальної смужки гортання, буде показано стовпчик «огляду». У цьому стовпчику буде показано резюме вхідних даних A. Ви зможете одразу побачити всі відмінності і конфлікти. Якщо використовується лише дві області вхідних даних, всі відмінності буде показано червоним кольором, оскільки відмінності у такому випадку є конфліктами. Чорною прямокутною рамкою буде показано видиму частину вхідних даних. Якщо файли, які порівнюються є достатньо об'ємними, кількість рядків у файлі може перевищити кількість пікселів у стовпчику огляду, отже декілька рядків відповідатимуть одній лінії у стовпчику огляду. У такому випадку показу конфліктів надаватиметься перевага перед показом простих відмінностей, які, у свою чергу, матимуть пріоритет перед відсутністю відмінностей. Отже буде показано всі відмінності і конфлікти. Наведення вказівника на певне місце у стовпчику огляду з наступним клацанням лівою кнопкою миші призведе до показу відповідного фрагмента файла у області показу.
Іноді алгоритмові обробки тексту, використаному у програмі, не вдається розташувати належні рядки один навпроти одного. У вас також може виникнути бажання порівняти фрагмент тексту з фрагментом тексту, розташованим у зовсім іншому місці файла, з яким виконується порівняння. У таких випадках ви можете вказати KDiff3 рядки для вирівнювання вручну. Позначте текст, вирівнювання якого ви бажаєте покращити за допомогою вказівника миші у першому перегляді даних так, як ви це робите, коли бажаєте скопіювати фрагмент тексту, а потім скористайтеся пунктом з меню (клавіатурне скорочення Ctrl+Y). Поряд з вибраним фрагментом тексту у стовпчику огляду з'явиться жовтогарячий прямокутник. Повторіть процедуру для другої і (якщо така є) третьої області даних. KDiff3 негайно переобчислюватиме відмінності після виконання вами дій і вирівнюватиме вибрані рядки. Звичайно ж, деякі з рядків, які збігалися за попереднього порівняння, можуть стати відмінними за нового порівняння.
У поточній версії програми ви не можете втручатися вручну у процес об'єднання.
У певних випадках KDiff3 визначить забагато або замало розділів відмінностей для об'єднання. У такому випадку ви можете об'єднати або поділити існуючі розділи.
Додайте нові розділи: спочатку виберіть текст у рядках, які відповідають один одному у кожній з областей вхідних даних (так як ви це робите під час копіювання даних до буфера). Потім скористайтеся пунктом з меню . Розрізи буде додано над першим рядком і під останнім рядком вибраного тексту. Якщо ви бажаєте додати лише один розділ, виберіть текст, що починається з іншого розрізу розділів.
Щоб об'єднати розділи у всіх областях вхідних даних, оберіть певну частину рядків розділів, які слід з'єднати. (Ви можете з'єднувати декілька розділів за один крок.) Після цього оберіть пункт з меню .

У області редактора даних об'єднання (розташованому під областями вхідних даних) є інформаційний рядок з заголовком Вивід:, назвою файла і рядком [Змінено], який з'явиться, якщо вами було внесено якісь зміни. Зазвичай, у цьому рядку буде міститися певні дані, виведені інструментами автоматичного об'єднання, але часто у цій області з'являтимуться повідомлення про конфлікти.
!!! Ви не зможете зберегти дані, аж доки всі конфлікти не буде розв'язано !!! (Скористайтеся кнопками , щоб перевести перегляд до конфліктів, які ще не розв'язано.)
Якщо ви працюєте з двома файлами вхідних даних, кожна з відмінностей є конфліктом, який слід розв'язати вручну.
Якщо вхідних файлів буде три, перший з них вважатиметься базовим, а другий і третій — такими, що містять зміни. Якщо певний з рядків змінено лише у файлі B або C, але не у двох цих файлах, програма автоматично обере змінений варіант. Лише у випадках, коли і у B, і у C одночасно змінено однакові рядки, програма вважатиме ситуацію конфліктною і пропонуватиме розв'язати конфлікт вручну. Якщо зміни, внесені у B і C є тотожними, буде вибрано варіант C.
У області редактора виводу об'єднання також передбачено стовпчик резюме, розташований ліворуч. У цьому стовпчику буде показано літеру варіанта, з якого було взято рядок, або нічого, якщо всі у всіх трьох джерелах рядок є однаковим. Конфліктні рядки буде позначено символом знака питання («?»), а у самому рядку буде показано червоний запис «Конфлікт об'єднання». Оскільки порядкове розв'язання конфліктів є справою досить марудною, рядки буде впорядковано за групами з однаковими відмінностями і характеристиками конфліктів. Конфлікти, які полягають лише у розташуванні пробілів, буде відокремлено від інших конфліктів, щоб полегшити об'єднання файлів, де зміни у відступах було внесено до багатьох рядків.
Після наведення вказівника миші у стовпчику резюме будь-якої з областей на певну позицію і клацання лівою кнопкою миші програма відкриє у всіх вікнах фрагмент тексту на початку групи, до якої належить позначений клацанням рядок. Після цього група стане «поточною групою». Цю групу буде позначено Кольором тла поточного діапазону різниці (можна змінити за допомогою пункту Інтеграція діалогового вікна параметрів програми), а зліва від тексту буде показано чорну рамку.
На панелі з кнопками, розташованій під смужкою меню, містяться три кнопки вибору вхідних даних, які позначено літерами A, B і C. Натисніть кнопку вибору вхідних даних, щоб вставити рядки (або вилучити рядки, якщо ці рядки вже було раніше вставлено) з відповідного джерела. Щоб позначити рядки з декількох вхідних джерел натисніть відповідні кнопки у потрібному порядку. Наприклад, якщо ви бажаєте, щоб рядкам з B було надано перевагу перед рядками з A у вихідних даних, спочатку натисніть B, а вже потім A.
Якщо ви використовуєте автоматичний перехід (позначено пункт «Автоматично перейти до наступного конфлікту за визначення джерела»), вам слід вимкнути його перед вибором рядків з декількох джерел або редагуванням рядків після вибору. Якщо ви цього не зробите, KDiff3 перейде до наступного конфлікту після вибору першого джерела даних.
Часто корисно напряму змінити вивід об'єднання. У перегляді резюме буде показано літеру «m» навпроти всіх рядків, які було змінено вручну. Якщо, наприклад, відмінності вирівняно таким чином, що простого вибору потрібного джерела буде недостатньо, ви можете позначити потрібний текст і скористатися звичайною дією з копіювання з вставленням, щоб розмістити потрібний фрагмент тексту у області виводу об'єднання.
Іноді, якщо певний рядок було вилучено або у результаті автоматично об'єднання, або редагування, і у групі більше не залишиться жодного рядка, програма показуватиме у відповідному рядку текст <Немає рядка джерела>. Цей рядок є лише заповнювачем для групи на випадок, якщо ви зміните свою думку і захочете знову позначити якийсь текст. Відповідний текст заповнювача не буде показано у збереженому файлі, його не буде включено до жодного з фрагментів, які ви копіюватимете і вставлятимете.
Якщо ви спробуєте скопіювати і вставити певний текст, що містить такий рядок, у буфері обміну даними буде лише рядок «<Конфлікт об'єднання>». Але будьте обережними, коли виконуєте подібне копіювання.
Звичайне об'єднання починатиметься з автоматичного розв'язання простих конфліктів. Але у меню передбачено і деякі інші пункти для виконання типових завдань. Якщо ви бажаєте вибрати певне джерело даних для розв'язання більшості конфліктів, ви можете вказати джерело A, B або C всюди або лише для ще нерозв'язаних конфліктів або для нерозв'язаних конфліктів, що полягають у різній кількості пробілів. Якщо ви бажаєте вирішувати кожен з конфліктів окремо, ви можете позначити пункт . Якщо ви бажаєте повернутися до автоматичного вибору KDiff3, скористайтеся пунктом . Після вибору цього пункту KDiff3 виконає об'єднання повторно. Якщо використання певного пункту меню змінюватиме результати попереднього редагування, KDiff3 запитає у вас підтвердження, перш ніж виконувати відповідну дію.
Примітка
Зауваження: якщо ви обираєте одне з джерел для розв'язання конфліктах пробілів і позначили один з пунктів «Ігнорувати числа» або «Ігнорувати коментарі C/C++» на сторінці Diff діалогового вікна параметрів програми, зміни у числах або коментарях вважатимуться змінами у пробілах.
Значна кількість систем керування версіями підтримує особливі ключові слова (наприклад "$Date$", "$Header$", "$Author$", "$Log$" тощо). Під час синхронізації системи керування версіями змінюють ці рядки. Наприклад, "$Date$" перетвориться на "$Date: 2009/03/22 18:45:01 $". Оскільки цей рядок буде різним у кожній з версій файла, під час спроби об'єднання потрібне буде втручання користувача.
У KDiff3 передбачено автоматичне об'єднання таких елементів. Для простих рядків, які відповідатимуть значенню параметра «Формальний вираз автооб'єднання» у всіх файлах вхідних даних, KDiff3 обере рядок з B або, у разі доступності, з C. Крім того, потрібно, щоб відповідні рядки стояли поруч у області порівняння, а попередній рядок не містив конфліктів. Подібне автоматичне об'єднання можна виконати або негайно після запуску об'єднання (позначенням пункту Запустити автооб'єднання за формальними виразом на початку об'єднання»), або пізніше, за допомогою пункту меню → .
Програмою підтримується і автоматичне об'єднання за журналом системи керування версіями. Автоматичне об'єднання за журналом можна виконати негайно після запуску об'єднання, якщо позначити пункт Об'єднувати за журналом керування версіями на початку об'єднання або пізніше за допомогою пункт меню → .
Зазвичай, журнал системи керування версіями починається з рядка, що містить ключове слово «$Log$». Початок журналу має відповідати значенню параметра Початковий формальний вираз журналу. KDiff3 визначає, які з рядків належать до журналу, аналізуючи початкові символи, які передують ключовому слову «$Log$». Якщо такі самі «початкові коментарі» зустрічаються і у наступних рядках, ці рядки також буде включено до журналу.
Під час кожної транзакції система керування версіями записує унікальний рядок з відомостями щодо версії, дати і часу транзакції та коментарів користувача. З цих елементів утворюється окремий запис журналу. Цей розділ журналу збільшується під час кожної транзакції, найсвіжіші записи з'являтимуться у верхній частині журналу (після початкового рядка журналу).
Якщо під час розробки двоє або декілька розробників вивантажують свої версії одного файл, у журналі об'єднання міститимуться декілька записів, які вважатимуться конфліктними під час об'єднання гілок. Оскільки подібні об'єднання можуть бути досить марудною справою, у KDiff3 передбачено підтримку двох можливих стратегій: простої вставки інформації від обох розробників у верхню частину журналу або впорядкування інформації журналу за визначеним користувачем ключем.
Налаштувати спосіб одночасної вставки всіх записів простіше. Слід просто вказати KDiff3 метод визначення рядків, які належатимуть до одного запису журналу. У більшості систем керування версіями після кожного запису журналу додається порожній рядок. Якщо система керування версіями не додає порожніх рядків у інших випадках, подібні рядки можуть слугувати достатнім критерієм для KDiff3. Достатньо вказати порожнє значення для параметра Початковий формальний вираз елемента історії на сторінці Об'єднання діалогового вікна параметрів програми. Якщо використання критерію порожнього рядка є недостатнім, ви можете вказати формальний вираз, за яким можна визначити початок запису журналу.
Зауважте, що KDiff3 вилучатиме записи журналу, що повторюватимуться. Якщо запис журналу зустрічається декілька разів у журналі певного вхідного файла, у виведених даних залишиться лише один запис.
Якщо ви бажаєте впорядкувати журнал, вам слід вказати спосіб побудови ключа впорядкування. Скористайтеся круглими дужками у полі параметра Початковий формальний вираз елемента історії на сторінці Об'єднання діалогового вікна параметрів програми для групування частин формального виразу, який пізніше буде використано як ключ впорядкування. Після цього вкажіть у полі Порядок сортування початків записів за ключем відокремлений комами список чисел, які відповідають позиції групи у формальному виразі.
Оскільки зробити все правильно від початку не так уже і просто, ви можете випробувати та покращити формальний вираз і створення ключів у відповідному діалоговому вікні за допомогою натискання кнопки .
Приклад: припустімо журнал виглядає так:
/************************************************************************** ** 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. **************************************************************************/
Початковому рядку журналу відповідатиме формальний вираз ".*\$Log.*\$.*". Після цього рядка йдуть записи журналу.
Рядок з записом ключового слова «$Log$» починається з двох символів «*», за якими слідує пробіл. KDiff3 вважає перший непробільний рядок «початковим коментарем» і припускає, що журнал завершується першим же рядком без такого коментаря. У нашому прикладі останній з рядків завершується фрагментом тексту, який також починається з двох символів «*», але замість символу пробілу за ними слідують додаткові символи «*». Отже цей рядок є кінцевим рядком журналу.
Якщо впорядкування журналу не потрібне, формальний вираз початку запису журналу може виглядати так (рядок було розбито на два через обмеження на довжину):
\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+.*
Докладніше про формальні вирази можна дізнатися з документації щодо формальних виразів. Зауважте, що «\s» (з маленьким «s») відповідає будь-якій кількості пробілів, а «\S» (з великим «S») відповідає будь-якій послідовності символів, що не містить пробілів. У нашому прикладі початок запису журналу містить спочатку інформацію про версію з формальним виразом «\\main\\\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]» і нарешті назву облікового запису розробника «.*».
Зауважте, що символи «початкового коментаря» (у нашому прикладі «**») буде попередньо вилучено KDiff3 ще перед порівнянням, отже формальний вираз починається з пошуку жодного або іншої кількості символів пробілу «\s*». Оскільки символи коментаря можуть бути різними у різних файлах (наприклад, у C/C++ використовуються символи коментування, відмінні від тих, які використовуються у скриптах Perl), KDiff3 сам визначає початкові символи коментаря, отже вам не потрібно вказувати їх у формальному виразі.
Якщо вам потрібне впорядкування журналу, програмі доведеться обчислити ключ впорядкування. Для цього слід згрупувати відповідні частини формального виразу у дужках (додаткові дужки можна і не прибирати, якщо ви захочете вимкнути впорядкування журналу):
\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+(.*)
Тепер у дужках містяться: 1. інформація про версію, 2. день, 3. місяць, 4. рік, 5. час, 6. назва облікового запису. Але якщо нам потрібне впорядкування за часом і датою, доведеться побудувати ключ впорядкування за допомогою елементів у іншій послідовності: спочатку рік, далі місяць, день, час, інформація про версію і назва облікового запису. Отже, порядок рядків має бути таким: «4,3,2,5,1,6».
Оскільки назви місяців не є гарним критерієм впорядкування (наприклад, «Apr» (квітень) буде першим), KDiff3 проаналізує послідовність, у якій було вказано назви, а потім використає замість назв відповідні номери («Apr»->«04»). Якщо буде знайдено якесь число, програма перетворить його на 4-цифрове значення за допомогою додавання початкових нулів, а потім застосує впорядкування. Нарешті, остаточний ключ впорядкування для початкового рядка першого запису журналу виглядатиме так:
2001 04 0002 10:45:41 integration_branch_12 tom
Докладніші відомості можна отримати з розділу Параметри об'єднання.
Більшість завдань з навігації текстом можна виконати за допомогою смужок гортання і миші, але пересування області видимого тексту можна здійснювати і за допомогою клавіш. Якщо ви наведете вказівник на будь-яку з областей програми, клацнете лівою кнопкою миші, ви зможете скористатися клавішами пересування курсора (←, →, ↑, ↓, PgUp, PgDn, Home, End, Ctrl+Home та Ctrl+End) так, як ви це робите у інших програмах. Крім того, ви можете скористатися клавішами для пересування області видимості за допомогою стовпчика огляду, розташованого поряд зі смужкою гортання: достатньо навести на нього вказівник і один раз клацнути лівою кнопкою миші.
Крім того, для гортання тексту вгору і вниз ви можете скористатися прокручуванням коліщатка миші.
Крім того, ви можете користуватися іншими клавішами у вікні редактора виводу об'єднання. Перемикатися між режимами вставки і перезапису можна за допомогою клавіші Ins. Типовим є режим вставки.
Наведення вказівника миші на певну позицію у будь-якому зі стовпчиків резюме з наступним клацанням лівою кнопкою миші синхронізує всі вікна на показі початку однакової групи рядків (як це описано у розділі "Визначення поточної групи і синхронізація позиції об'єднання і перегляду відмінностей").
Крім того, на панелі навігації міститься дев'ять навігаційних кнопок, за допомогою натискання яких ви можете переводити область перегляду до поточної/першої/останньої відмінності, наступної/попередньої відмінності (Ctrl+↓/Ctrl+↑), до наступного/попереднього конфлікту (Ctrl+PgDn/Ctrl+PgUp) або наступного/попереднього нерозв'язаного конфлікту. Зауважте, що для KDiff3 «конфлікт», який не було автоматично розв'язано на початку об'єднання, залишатиметься «конфліктом», навіть якщо його буде розв'язано. Отже немає потреби у виокремленні випадку «нерозв'язаного конфлікту».
Крім того, передбачено кнопку (автоматичне продовження). Якщо ви позначите відповідний пункт, за вибору одного з джерел KDiff3 переходитиме до наступного нерозв'язаного конфлікту у автоматичному режимі. Подібна поведінка буде корисною, якщо ви маєте намір під час розв'язання завжди обирати лише одне з джерел даних. Якщо вам потрібні два джерела, або результат доведеться редагувати, ймовірно, вам слід зняти позначку з відповідного пункту. Перш ніж перейти до наступного нерозв'язаного конфлікту, KDiff3 деякий час показуватиме вам результат вашого вибору. Тривалість затримки можна визначити у параметрах Об'єднання: ви можете вказати значення Автоматичне продовження за (у мс) у діапазоні від 0 до 2000. Підказка: втомилися клацати? — зменшіть значення автоматичного продовження і скористайтеся клавіатурними скороченнями Ctrl+1/2/3 для вибору джерела A/B/C, якщо конфліктів дуже багато.
Курсор у вікнах вхідних даних програми показано не буде, отже вибір слід робити за допомогою миші: натисніть ліву кнопку миші, коли вказівник знаходитиметься на початку області вибору, утримуючи кнопку натиснутою, пересуньте вказівник у кінцеву точку області вибору, після чого відпустіть кнопку. Вибрати слово можна наведенням вказівника миші на це слово з наступним подвійним клацанням. Вибір у вікні редактора виводу об'єднання можна здійснювати за допомогою клавіатури: утримуйте натиснутою клавішу Shift і пересувайте межу області вибору за допомогою навігаційних клавіш.
Якщо вибраний фрагмент не може бути показаний у видимому діапазоні тексту, ви можете пересунути вказівник миші за межі вікна програми, що спричинить гортання тексту програмою KDiff3 у відповідному напрямку.
Для вибору дуже великих фрагментів тексту ви можете також скористатися натисканням клавіш навігації з одночасним утримуванням натиснутою кнопки миші. Наприклад, можна скористатися клавішами Page Up і Page Down, щоб швидко перейти до певної позиції. Коли вибір досягне потрібної позиції, відпустіть кнопку миші.
Щоб позначити увесь вміст поточного вікна, скористайтеся пунктом меню → (Ctrl+A).
Щоб скопіювати вибране до буфера обміну даними, вам слід натиснути кнопку (або скористатися комбінацією клавіш Ctrl+C чи Ctrl+Ins). Крім цього, передбачено пункт «Автоматичне копіювання позначеного». Якщо його буде позначено, всі вибрані вами фрагменти буде негайно скопійовано, вам не доведеться явно користуватися дією з копіювання. Але користуйтеся цією можливістю обережно, оскільки за її використання ви можете випадково пошкодити вміст буфера обміну даними.
Дія (Ctrl+X або Shift+Del) призводить до копіювання фрагмента тексту до буфера обміну даним з наступним його вилученням з тексту.
Команда (клавіатурні скорочення Ctrl+V або Shift+Ins) вставляє текст з буфера обміну даними у позицію курсора або замість вибраного тексту. Якщо ви виконаєте команду вставлення у будь-якому з вікон вхідних даних, у цьому вікні буде показано вміст буфера обміну даними, а порівняння буде негайно перезапущено. Ця дія буде корисною, якщо вам потрібно нашвидкуруч порівняти взятий звідкись фрагмент тексту з іншим фрагментом без створення файлів з текстом фрагментів.
Збереження стане можливим, лише якщо буде розв'язано всі конфлікти. Якщо файл вже існує і ви позначите пункт Файли резерву на сторінці Тека діалогового вікна параметрів програми, наявний файл буде перейменовано з додаванням суфікса .orig, якщо ж файл з таким суфіксом вже існуватиме, його буде перезаписано. Якщо на час завершення роботи програми або початку іншого порівняння відмінностей дані ще не буде збережено, KDiff3 запитає вас про те, яку дію ви бажаєте виконати: зберегти файл, скасувати завершення редагування або продовжити без збереження файла. (Сама програма KDiff3 не перехоплює ніяких сигналів. Отже, якщо ви скористаєтеся командою на зразок «kill» щодо KDiff3, ваші дані буде втрачено.)
Програма використовуватиме символи завершення рядків, які характерні для системи, у які запущено програму. У UNIX® всі рядки завершуються символом переходу на наступний рядок «\n», у системах заснованих на архітектурі Win32 всі рядки завершуються сукупністю символу повернення каретки і переходу на наступний рядок «\r\n». KDiff3 не зберігає символи завершення рядків, використані у файлах з вхідними даними, а це означає, що не слід використовувати KDiff3 для двійкових даних.
Ви можете виконати пошук текстового рядка у будь-якому з вікон KDiff3. За допомогою пункту меню → (клавіатурне скорочення Ctrl+F) можна відкрити діалогове вікно, у якому ви зможете вказати рядок, який ви шукаєте. Крім того, ви можете вказати вікна, у яких відбуватиметься пошук. Пошук завжди виконуватиметься від початку даних. Для переходу до наступного знайденого рядка можна скористатися пунктом меню → menu item (F3). Якщо пошук виконуватиметься у декількох вікнах, спочатку буде вказано варіанти у першому вікні, згори до низу, потім у другому вікні тощо.
У KDiff3 передбачено підтримку друку відмінностей у текстових файлах. За допомогою пункту меню → (клавіатурне скорочення Ctrl+P) ви можете відкрити діалогове вікно, за допомогою якого можна вибрати принтер та налаштувати інші параметри друку.
Існує декілька способів налаштування діапазону друку. Через відмінності у діалогових вікна друку у різних операційних системах, методи визначення певного діапазону можуть бути різними.
- Всі:
Надрукувати все.
- Поточна:
Надрукувати сторінку, починаючи з першого рядка, який видно у вікні. (У системах, де немає подібного параметра, цей спосіб друку можна увімкнути за допомогою визначення для друку номера сторінки 10000.)
- Вибір:
Перш ніж наказати програмі надрукувати дані, виберіть фрагмент тексту за допомогою миші (у той самий спосіб, що і під час копіювання з вставленням) у одному з вікон вхідних даних з метою визначення початкового і кінцевого рядка. Якщо не буде позначено жодного фрагмента тексту у жодній з областей вхідних даних, вибір рядків буде недоступним. (У системах, де не буде цього пункту, ви можете досягнути потрібного результату, якщо вкажете для друку сторінку за номером 9999.)
- Діапазон:
Тут вам слід вказати першу і останню сторінки.
Інші важливі параметри друку буде взято зі звичайних параметрів.
Шрифт, розмір шрифту
Показати номери рядків
Перенесення слів
Кольори
тощо
Крім того, радимо вам скористатися альбомною орієнтацією для друку.
Параметри і список нещодавніх файлів зберігатимуться під час завершення роботи програми, а потім знову завантажуватимуться під час наступного запуску. (Меню → )
Вибрати моноширинний шрифт. (У деяких системах у цьому діалоговому вікні буде показано і шрифти зі змінною шириною символів, але вам не слід їх використовувати.)
- Вікна редактора і різниці:
- Колір тексту:
Зазвичай, чорний.
- Колір тла:
Зазвичай, білий.
- Колір тла різниці:
Зазвичай, світло-сірий.
- Колір A:
Зазвичай, темно-синій.
- Колір B:
Зазвичай, темно-зелений.
- Колір C:
Зазвичай, темно-пурпуровий.
- Колір конфліктів:
Зазвичай, червоний.
- Колір тла поточного діапазону:
Зазвичай, світло-жовтий.
- Колір тла поточного діапазону різниці:
Зазвичай, темно-жовтий.
- Колір для діапазонів різниць вирівняних вручну:
Зазвичай, жовтогарячий.
- Перегляд порівняння тек:
- Колір найновішого файла:
Зазвичай, зелений.
- Колір найстарішого файла:
Зазвичай, червоний.
- Колір файлів проміжного віку:
Зазвичай, темно-жовтий.
- Колір відсутніх файлів:
Зазвичай, чорний.
Зміна кольорів у режимі порівняння тек набуде чинності лише під час наступного порівняння тек.
У системах, відеопідсистема яких може показувати лише 16 або 256 кольорів, певні кольори не можна буде показати у початковій формі. У таких системах точний колір можна вибрати за допомогою кнопки .
- Використовувати пробіли замість табуляції
Якщо цей пункт не буде позначено, а ви натиснете клавішу табуляції, буде вставлено символ табуляції, у іншому випадку у документ буде вставлено належну кількість символів пробілу.
- Розмір табуляції:
Можна налаштувати відповідно до ваших потреб. Типове значення —
8.- Автовідступ
Після натискання клавіші Enter або Return відступ попереднього рядка використовується у наступному рядку.
- Автоматичне копіювання позначеного
Якщо буде позначено цей пункт, всі виділені фрагменти негайно копіюватимуться до буфера обміну даними, вам не потрібно буде виконувати явного копіювання.
- Стиль кінців рядка:
Ви можете вказати, якому стилю завершення рядків слід надавати перевагу програмі під час зберігання даних. Типовим буде завершення рядка загальне для всієї системи.
Під час порівняння файлів KDiff3 спочатку намагається знайти однакові рядки у всіх файлах вхідних даних. Лише на цьому етапі програма може ігнорувати пробіли. На другому етапі програма порівнює всі рядки окремо. На цьому етапі програма не ігноруватиме пробіли. Крім того, пробіли не ігноруватимуться під час об'єднання.
- Ігнорувати числа (вважати пробілами)
Типово пункт не позначено. Символи, які є частиною чисел, («0»-«9», «.», «-») буде проігноровано під час першої частини аналізу, під час якої програма встановлює відповідність рядків. У результатах порівняння відмінність у символах чисел буде враховано, але самі ці символи вважатимуться пробілами.
- Ігнорувати коментарі C/C++ (вважати пробілами)
Типово вимкнено. За позначення, зміни у коментарях будуть оброблятися як зміни у пробілах.
- Ігнорувати зміни регістру (вважати пробілами)
Типово вимкнено. За позначення, відмінності у регістрі літер (зокрема «A» і «a») будуть оброблятися як зміни у пробілах.
- Команда препроцесора:
Див. наступний розділ.
- Команда відповідності рядків препроцесора:
Див. наступний розділ.
- Агресивніше (повільніше)
Намагатися знайти найменші відмінності. Типово увімкнено. Подібне порівняння, ймовірно буде корисним для складних і великих файлів. Значно сповільнює обробку великих файлів.
- Вирівняти B і C для 3 вхідних файлів
Спробувати вирівняти B і C під час порівняння або об'єднання трьох вхідних файлів. Не рекомендується для об'єднання, оскільки такі дії можуть його ускладнити. (Типово вимкнено.)
- Автоматичне продовження за (у мс):
У режимі автоматичного продовження цей параметр визначає час, протягом якого програма показуватиме результат вибору перед переходом до наступного нерозв'язаного конфлікту.
- Показувати інформаційні вікна
Показувати діалогове вікно з відомостями про кількість конфліктів.
- Типове значення пробілів для об'єднання 2/3 файлів:
Автоматично розв'язати всі конфлікти у пробілах вибором вказаного файла. (Типово, визначеного вручну) Корисно, якщо пробіли не є суттєвими у багатьох файлах. Якщо ви не бажаєте використовувати подібні налаштування постійно, краще скористайтеся пунктом Вибрати A/B/C для всіх нерозв'язаних конфліктів пробілів з меню . Зауважте, що якщо ви позначили якийсь з пунктів Ігнорувати числа або Ігнорувати коментарі C/C++, подібний автоматичний вибір стосуватиметься і конфліктів, пов'язаних з відмінностями у числах або коментарях.
- Формальний вираз автооб'єднання:
Формальний вираз для рядків, у яких KDiff3 слід автоматично обирати одне джерело. Див. також Автоматичне об'єднання...
- Запустити автооб'єднання за формальними виразом на початку об'єднання
Якщо позначити цей пункт, KDiff3 виконає автоматичне об'єднання на основі даних пункту Формальний вираз автооб'єднання після запуску процесу об'єднання.
- Початковий формальний вираз елемента історії:
Формальний вираз для початку запису історії керування версіями. Зазвичай, цей рядок містить ключове слово «
$Log$». Типове значення: «.*\$Log.*\$.*»- Початковий формальний вираз елемента історії:
Під час об'єднання записів журналу програма працюватиме з записами, що складаються з декількох рядків. Тут ви можете вказати формальний вираз, за яким програма визначатиме перший рядок такого запису (без початкового коментаря). Скористайтеся круглими дужками для групування ключів, які ви бажаєте згодом використати для впорядкування. Якщо у цьому полі буде порожньо, KDiff3 вважатиме, що записи журналу відокремлюються порожніми рядками. Див. також Автоматичне об'єднання...
- Впорядкування історії при об'єднанні
Увімкнути впорядкування за журналом системи керування версіями.
- Порядок сортування початків записів за ключем:
Кожна пара дужок, які використовуються у формальному виразі, містить ключ впорядкування записів історії. Вкажіть список ключів (пронумерованих у порядку появи, починаючи з
1), з використання роздільника "," (наприклад "4,5,6,1,2,3,7"). Якщо залишити це поле порожнім, сортування не проводитиметься. Подробиці можна дізнатися з Автоматичне об'єднання...документації.- Об'єднувати за журналом керування версіями на початку об'єднання
Якщо буде позначено KDiff3 виконуватиме автоматичне об'єднання журналів на основі раніше згаданих параметрів після запуску процесу об'єднання.
- Макс. кількість записів у історії:
KDiff3 обмежуватиме кількість записів журналу до вказаної. Значенням
-1можна скористатися, щоб вимкнути обмеження. (Типовим значенням є-1).- Перевіряти ваші формальні вирази
За допомогою натискання цієї кнопки ви можете наказати програмі відкрити діалогове вікно, у якому ви зможете випробувати і покращити вказаний вище формальний вираз. Достатньо просто скопіювати відповідні дані з ваших файлів до рядків прикладу. У полі Результати порівняння негайно буде показано, було ваше порівняння вдалим чи ні. У полі Результат ключа впорядкування буде показано ключ, який буде використано під час впорядкування результату об'єднання журналів.
- Безвідносна команда об'єднання:
Вкажіть власну команду, яку слід виконати, якщо KDiff3 виявить, що під час трикомпонентного об'єднання файл з B не містить ніяких відповідних даних, яких би не містилося у файлі з C. Команда виконуватиметься з параметрами — назвами трьох файлів. Дані, що відповідатимуть Формальному виразу автооб'єднання або дані з журналу не вважатимуться відповідними.
- Автоматично зберегти і вийти, якщо немає конфліктів
Якщо KDiff3 було запущено для об'єднання файлів з командного рядка і всі конфлікти можна розв'язати без втручання користувача, автоматично зберегти файли і вийти. (Відповідає параметру командного рядка
--auto.)
Ці параметри використовуватимуться під час сканування теки і виконання об'єднання: докладніше про це можна дізнатися з розділу щодо порівняння тек/об'єднання.
Крім того, тут є ще один параметр, пов'язаних зі збереженням окремих файлів:
- Створювати резервні копії файлів (.orig)
Якщо програма зберігатиме файл, який має попередню версію, початкову версію файла буде перейменовано з додаванням суфікса
.orig. Якщо у теці вже є файл резервної копії з назвою, що містить суфікс.orig, цей файл буде заміщено новим без створення додаткових резервних копій.
- Використовувати однакове кодування для всього
Наведені нижче параметри кодування можна скоригувати окремо для кожного з елементів, якщо ж цей пункт буде позначено, всім параметрам буде надано значення першого параметра.
- Зауваження: локальним кодуванням є «...»
Над списком, призначеним для вибору кодування, буде показано пункт, який інформуватиме вас про поточне системне кодування. (Значення цього пункту змінювати не можна. Його призначено для інформування вас, якщо поточне кодування вам не відоме.)
- Автовизначення
Якщо буде позначено цей пункт, програма використовуватиме позначку порядку байтів (BOM) або метадані з документів XML/HTML для визначення кодування. Якщо визначити кодування у такий спосіб не вдасться, програма виконає перевірку того, чи може бути короткий зразок з початку файла оброблено як UTF-8. Якщо цю перевірку буде пройдено, буде використано кодування UTF-8. Якщо і цю перевірку не буде пройдено, програма скористається вибраним користувачем кодеком. Якщо не буде виявлено позначки порядку байтів або метаданих, підтримку кодувань буде обмежено лише UTF-8.
- Кодування файла для A/B/C:
Визначає кодування файлів з вхідними даними. Значення цього параметра визначає спосіб обробки спеціальних символів. Оскільки кодування для кожного з вхідних файлів можна визначати окремо, ви маєте змогу порівнювати навіть файли у різному кодуванні.
- Кодування файла для об'єднання і збереження:
Якщо ви маєте намір змінити файл, ви можете вказати кодування, яке буде використано для збереження цього файла.
- Кодування файлів для файлів препроцесора:
Якщо ви визначаєте інструменти попередньої обробки, може так статися, що вони не зможуть працювати з вашим кодуванням. Приклад: ваші файли зберігаються у 16-бітовому кодуванні Unicode, а ваш інструмент попередньої обробки може працювати лише з даним у 8-бітовому кодуванні ASCII. За допомогою цього пункту ви можете визначити кодування для вихідних даних інструменту попередньої обробки (препроцесора).
- Мова з записом справа ліворуч:
Запис текстів деякими мовами виконується справа ліворуч. Якщо буде позначено цей пункт, KDiff3 показуватиме текст у напрямку справа ліворуч у областях вхідних даних і у області об'єднаних даних. Зауважте, що, якщо KDiff3 було запущено командою з параметром
--reverseвсі елементи компонування вікна програми буде також вирівняно справа ліворуч. Цю можливість реалізовано за допомогою бібліотеки Qt™.Примітка
Цю документацію було написано у припущенні, що пункт «Мова з записом справа ліворуч» не позначено, а зворотне компонування не увімкнено. Отже, якщо відповідні параметри все ж було увімкнено, вам слід поміняти місцями слова «ліворуч» і «праворуч», використані у цьому підручнику.
(Доступ до цих параметрів можна отримати за допомогою меню або кнопок панелі інструментів.)
- Параметри огляду:
Відповідні варіанти будуть доступними лише у разі порівняння трьох файлів. У звичайному режимі всі відмінності буде показано у одному розфарбованому у різні кольори стовпчику огляду. Але іноді у вас може виникати зацікавленість у перегляді відмінностей лише у двох з цих трьох файлів. У разі вибору одного з варіантів перегляду, «A з B», «A з C» або «B з C», програма покаже другий стовпчик огляду з потрібними даними, розташований поряд зі звичайним стовпчиком огляду.
Переносити рядки, чия довжина перевищує ширину вікна.
Іноді бажано максимально використати простір вікна для показу довгих рядків. Сховайте вікна, які не є важливими (за допомогою меню «Вікно»).
Перемикає орієнтацію вікон різниць, розташованих поруч (A ліворуч від B, а B ліворуч від C) або одне над одним (A над B над ). Цей параметр може допомогти вам покращити перегляд, якщо рядки достатньо довгі (у меню Вікна).
Працюватиме лише у випадку, коли ви маєте справу з порівнянням двох файлів. Одним клацанням лівою кнопкою миші ви можете розпочати об'єднання з використанням назви файла останнього файла вхідних даних як типової назви для файла виводу. Якщо ви скористалися відповідним пунктом для перезапуску об'єднання, назву файла виводу змінено не буде.
Зніміть позначку з цього пункту, щоб придушити підсвічування відмінностей у кількості пробілів у тексті або стовпчиках огляду. Зауважте, що це також стосується відмінностей у числах та коментарях, якщо позначено пункти Ігнорувати числа (вважати пробілами) та Ігнорувати коментарі C/C++ (вважати пробілами).
Іноді візуалізація пробілів і символів табуляції заважає перегляду. За допомогою цього пункту ви можете її вимкнути.
За допомогою цього пункту ви можете наказати програмі показувати або не показувати номери рядків тексту.
У KDiff3 підтримуються два параметри попередньої обробки.
- Команда препроцесора:
Під час читання будь-якого файла його буде оброблено вказаною зовнішньою програмою. Замість вмісту початкового файла ви побачите дані, виведене відповідною програмою. Ви можете написати ваш власний інструмент попередньої обробки (препроцесор), який виконуватиме потрібні вам дії. Препроцесор може вирізати непотрібні частини файлів або автоматично виправити відступи тощо.
- Команда відповідності рядків препроцесора:
Під час читання будь-якого файла його буде оброблено вказаною зовнішньою програмою. Якщо було вказано команду-препроцесор (див. вище), дані, виведені препроцесором стануть вхідними даними для препроцесора пошуку відповідних рядків. Виведені цим препроцесором дані буде використано лише під час фази знаходження відповідників аналізу вмісту файлів. Ви можете написати ваш власний інструмент попередньої обробки (препроцесор), який виконуватиме потрібні вам дії. За використання такого препроцесора кожному рядку вхідних даних має відповідати точно один рядок виведених даних.
Призначенням препроцесорів є надання у розпорядження користувача більшої гнучкості у налаштуванні результату порівняння. Використання препроцесора вимагає наявності зовнішньої програми, а більшість користувачів не є програмістами. Непоганою новиною тут має стати те, що дуже часто для виконання потрібних завдань достатньо скористатися командами sed або perl.
Приклад. Простий тест: розглянемо файл a.txt (6 рядків):
aa
ba
ca
da
ea
fa
і файл b.txt (3 рядки):
cg
dg
eg
Якщо не використовувати препроцесора, у відповідність буде "#~ "поставлено такі рядки:
aa - cg
ba - dg
ca - eg
da
ea
fa
Навряд чи ми бажали саме цього, оскільки насправді важливу інформацію містить перша літера рядка. Щоб допомогти алгоритмові пошуку відповідників уникнути порівняння за другою літерою, ми можемо скористатися командою-препроцесором, яка замінить «g» на «a»:
sed 's/g/a/'
У результаті виконання цієї команди порівняння матимемо:
aa
ba
ca - cg
da - dg
ea - eg
fa
З точки зору внутрішньої структури програми, алгоритм пошуку відповідників застосовується лише після запуску препроцесора пошуку відповідників, але на екрані файл залишиться незмінним. Звичайний же препроцесор змінив би вміст файла на екрані.
Цей розділ є лише вступом, у якому обговорено найпростіші можливості команди sed. Докладніші відомості можна знайти на сторінці info:/sed або http://www.gnu.org/software/sed/manual/html_mono/sed.html. Зібрану версію цієї програми для Windows® можна знайти за адресою http://unxutils.sourceforge.net. Зауважте, що у наведених нижче прикладах припускається, що файл програми sed зберігається у одній з тек, які вказано у змінній середовища PATH. Якщо це не так, вам доведеться вказувати повний абсолютний шлях до файла програми.
У цьому контексті використовується лише команда заміни sed:
sed 's/ФОРМАЛЬНИЙ_ВИРАЗ/ЗАМІННИК/ПРАПОРЦІ'
Перш ніж користуватися новою командою у KDiff3, вам слід спочатку випробувати її у консолі. Для такої перевірки вам знадобиться команда echo. Приклад:
echo abrakadabra | sed 's/a/o/' -> obrakadabra
У цьому прикладі ми продемонстрували дуже просту команду sed, яка заміняє перше знайдене «a» на «o». Якщо ви бажаєте замінити всі «a», вам слід скористатися прапорцем «g»:
echo abrakadabra | sed 's/a/o/g' -> obrokodobro
Символ «|» використовується для створення конвеєрів: дані, виведені попередньою командою, передаються як вхідні дані наступній команді. Якщо ви бажаєте виконати перевірку на великому файлі, вам слід скористатися командою cat у UNIX®-подібних системах або командою type у Windows®-подібних системах. sed виконає заміну у всіх рядках.
catназва файла| sedпараметри
Поточна версія KDiff3 розуміє лише коментарі у стилі C/C++. За допомогою команди препроцесора пошуку відповідників ви можете наказати програмі ігнорувати інші типи коментарів перетворенням цих коментарів на коментарі C/C++.
Приклад: щоб наказати програмі ігнорувати коментарі, що починаються з «#», вам слід перетворити цей символ на «//». Зауважте, що вам також слід позначити пункт Ігнорувати коментарі C/C++, щоб отримати бажаний результат. Відповідна команда препроцесора пошуку відповідників буде такою:
sed 's/#/\/\//'
Оскільки у sed символ «/» має особливе призначення, у рядку-заміннику перед кожним символом «/» слід додавати символ «\». Цей символ потрібен для додавання або вилучення особливого призначення інших символів. Крім того, символи одинарних лапок (') перед і після команди заміни є важливими лише під час тестування команд командної оболонки, оскільки якщо ви їх не використовуватимете, оболонка виконання команд намагатиметься інтерпретувати деякі символи. Сама програма KDiff3 не виконуватиме інтерпретації, окрім як для послідовностей символів «\"» та «\\».
Скористайтеся такою командою препроцесора пошуку відповідників для перетворення усіх символів вхідних даних до верхнього регістру:
sed 's/\(.*\)/\U\1/'
У цій команді ми використали «.*» — формальний вираз, що відповідає будь-якому рядку, а у нашому контексті відповідними вважатимуться всі символи рядка. Послідовність символів «\1» у рядку-заміннику відповідає знайденому тексту у першій парі круглих дужок, «\(» і «\)». Команда «\U» перетворює символи вставленого тексту на символи у верхньому регістрі.
У CVS та інших системах керування версіями використовується декілька ключових слів, призначених для вставки автоматично створених рядків (див. info:/cvs/Keyword substitution). Всі ці ключові слова буде вказано за схемою: $КЛЮЧОВЕ_СЛОВО створений текст$. Нам буде потрібна команда препроцесора пошуку відповідників, який вилучить лише створений текст:
sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/'
Символ «\|» відокремлює можливі варіанти ключових слів. Можливо, вам слід змінити цей список відповідно до ваших потреб. Перед символом «$» обов'язково слід додати символ екранування «\», оскільки у іншому випадку команда вважатиме, що «$» позначає кінець рядка.
Під час експериментів з sed ви краще зрозумієте механізм дії і навіть полюбите формальні вирази. Це буде корисним, оскільки значна кількість інших програм підтримують подібні формальні вирази.
Насправді ігнорування чисел є вбудованою функцією. Але, як ще один приклад, ми покажемо, як зробити так, щоб під час пошуку відповідників програма ігнорувала числа, за допомогою команди препроцесора порівняння рядків:
sed 's/[0123456789.-]//g'
Препроцесор знайде всі символи, вказані між квадратними дужками, і вилучить їх (замінить на порожнє місце).
Іноді ви маєте справу зі строго форматованим текстом, який містить позиції, які завжди слід ігнорувати, інші ж позиції тексту потрібно проаналізувати. У наступному прикладі буде проігноровано перших п'ять позицій (символів), наступні десять позицій буде збережено, наступні п'ять знову проігноровано, решту рядка буде збережено:
sed 's/.....\(..........\).....\(.*\)/\1\2/'
Кожна крапка «.» замінює собою будь-який одинарний символ. Записи «\1» і «\2» у рядку-заміннику посилаються на знайдений текст у першій і другій парі круглих дужок («\(» і «\)») і є замінниками знайденого тексту без змін.
Іноді виникає потреба у одночасному виконанні декількох підстановок. У такому випадку ви можете скористатися крапкою з комою («;»), щоб відокремити одну підстановку від інших. Приклад:
echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/' -> OBROKODOBRO
Замість sed ви можете скористатися, наприклад, perl.
perl -p -e 's/ФОРМАЛЬНИЙ_ВИРАЗ/ЗАМІННИК/ПРАПОРЦІ'
Але у perl ви матимете справу з дещо відмінними конструкціями формальних виразів. Зауважте, що там, де у sed слід використовувати "\(" і "\)", у perl слід використовувати простіший варіант "(" і ")" без попередніх '\'. Приклад:
sed 's/\(.*\)/\U\1/' perl -p -e 's/(.*)/\U\1/'
Дані буде пропущено через всі внутрішні та зовнішні препроцесори у такому порядку:
Звичайний препроцесор,
Препроцесор пошуку рядків,
Ігнорування регістру (вважати пробілами) (перетворення на літери верхнього регістру),
Визначення коментарів C/C++,
Ігнорування чисел (вважати пробілами),
Ігнорування пробілів
Після обробки звичайним препроцесором дані не буде змінено: їх буде показано і об'єднано у початковому вигляді. За допомогою інших дій у програмі можна буде змінити лише дані, які було повернуто алгоритмом пошуку відповідних рядків.
У рідкісних випадках використання звичайного препроцесора зауважте, що препроцесор пошуку відповідних рядків оброблятиме лише рядки, передані йому звичайним препроцесором.
Часто команди попередньої обробки виявляються дуже корисними, але, як це трапляється з будь-якою дією, внаслідок якої відбувається автоматична заміна фрагментів вашого тексту або приховування певних відмінностей, може статися випадковий пропуск певних даних або, у найгіршому випадку, знищення важливих даних.
З цієї причини під час об'єднання, якщо було використано звичайну команду-препроцесор, KDiff3 повідомить вас про це і запитає про те, бажаєте ви вимкнути наслідки дії цієї команди чи ні. Але програма не попереджатиме вас про використання команди-препроцесора, призначеної для пошуку відповідних рядків. Об'єднання не буде завершено, доки ви не розв'яжете всі конфлікти. Якщо ви знімете позначку з пункту «Показувати пробіли», відмінності, які було вилучено командою-препроцесором пошуку відповідних рядків, також стануть невидимими. Якщо після цього ви не зможете зробити кнопку «Зберегти» активною під час об'єднання (оскільки залишатимуться не розв'язані конфлікти), знову позначте пункт «Показувати пробіли». Якщо ви не бажаєте виконувати розв'язання цих малозначущих конфліктів вручну, ви можете скористатися пунктами «Вибрати A/B/C для всіх нерозв'язаних конфліктів пробілів» з меню «Об'єднання».
Часто програмістам для досягнення потрібної мети доводиться змінювати багато файлів у певній теці. У такому випадку KDiff3 надасть вам змогу порівняти і об'єднати цілі теки рекурсивно!
Хоча порівняння і об'єднання тек здається зовсім очевидною дією, існує декілька моментів, на які вам слід звернути увагу. Найважливішим є, звичайно ж, той факт, що кожна з дій на цей раз включатиме цілий набір файлів. Якщо у вас немає резервних копій початкових даних, теку буде дуже важко або навіть неможливо повернути у початковий стан. Отже, перш ніж виконувати об'єднання, переконайтеся, що ваші дані у безпеці і повернення до попереднього стану можливе. Можна скористатися архівуванням або використати одну з систем керування версіями, але навіть досвідченим програмістам та інтеграторам іноді можуть знадобитися старі коди програм. Зауважте, що хоча автор KDiff3 намагався (і намагатиметься) зробити програму якомога кращою, гарантувати відсутність вад у програмі просто неможливо. Відповідно до GNU-GPL автор НІЧОГО НЕ ГАРАНТУЄ щодо цієї програми. Отже, змиріться і завжди пам'ятайте, що:
Людині властиво помилятися, але, щоб насправді все заплутати, їй потрібен комп'ютер.
Отже, ось що ця програма може зробити для вас: KDiff3 ...
...рекурсивно прочитати і порівняти дві або три теки,
...виконати особливу обробку символічних посилань,
...надати вам змогу переглянути файли подвійним клацанням кнопкою миші,
...для кожного з пунктів запропонувати дію з об'єднання, яку ви можете змінити перед тим, як розпочати об'єднання тек,
...надати вам змогу зімітувати об'єднання і показати список дій, які буде виконано без їх виконання насправді,
...надати вам змогу насправді виконати об'єднання і втрутитися, якщо знадобиться ваше втручання вручну,
...надати вам змогу виконати вибрану дію для всіх елементів (клавіша F7) або вибраного елемента (клавіша F6),
...надати вам змогу продовжити автоматичне об'єднання за допомогою клавіші F7, після вашого втручання вручну,
...за бажання, створити резервні копії з суфіксом
.orig,...
Виконання цього завдання дуже подібне на виконання завдання з порівняння і об'єднання окремих файлів. Вам просто слід вказати теки у командному рядку або у діалоговому вікні відкриття файлів.
kdiff3тека1 тека2kdiff3тека1 тека2-oтека_призначення
Якщо не буде вказано теки призначення, KDiff3 використовуватиме тека2.
kdiff3тека1 тека2 тека3kdiff3тека1 тека2 тека3-oтека_призначення
Якщо об'єднуються три теки, базовою для об'єднання буде тека1. Якщо теки призначення не вказано, KDiff3 використає з цією метою тека3.
Зауважте, що автоматично починається лише порівняння, але не об'єднання. Щоб виконати об'єднання, вам слід скористатися відповідним пунктом меню або натиснути клавішу F7 (докладніше про це згодом).
Під час читання тек програма показуватиме піктограму з поштовою скринькою, яка позначає виконання завдання. Якщо ви перервете сканування тек, буде показано список лише тих файлів, які програма встигла просканувати.
Після завершення сканування тек KDiff3 покаже панель з результатами ліворуч...

... і подробиці щодо поточного вибраного елемента праворуч:

Тут буде показано ієрархічний список всіх файлів і тек, які було знайдено під час сканування. Вибрати пункт списку можна наведенням на нього вказівника миші з наступним клацанням лівою кнопкою миші.
Типово, теки буде згорнуто. Розгортати або згортати теки можна натисканням кнопки «+»/«-», подвійним на позначці теки або за допомогою натискання клавіш зі стрілочками ліворуч і праворуч на клавіатурі. Крім того, у меню міститься два пункти, і , за допомогою яких ви можете згортати або розгортати всі теки одразу.
Після наведення вказівника миші на позначку файла з наступним подвійним клацанням лівою кнопкою миші буде відкрито перегляд відмінностей для відповідного файла.
Зображення у стовпчику назви відповідатиме типу файла у першій теці (A). Можливі такі варіанти:
Звичайний файл
Звичайна тека (зображення теки)
Посилання на файл (зображення файла з стрілочкою посилання)
Посилання на теку (зображення теки зі стрілочкою посилання)
Якщо типи файлів у теках відрізнятимуться, ви зможете помітити це за стовпчиками A/B/C, а також за вікном докладними відомостями щодо вибраного пункту. Зауважте, що у таких випадках вибір автоматичного об'єднання неможливий. Якщо користувач викличе дію з об'єднання, його буде попереджено про проблеми з типом файлів.
Як можна бачити на наведеному вище зображенні для стовпчиків A/B/C використовуються червоний, зелений, жовтий і чорний кольори.
Чорний: елемента не існує у цій теці.
Зелений: найновіший елемент.
Жовтий: старіший за зелений, новіший за червоний.
Червоний: найстаріший елемент.
Але елементи, які є однаковими у всіх теках колір теж буде однаковим, хоча їх вік і відрізнятиметься.
Теки вважатимуться однаковими, якщо всі елементи, які у них містяться, є однаковими. Однакові елементи програма показуватиме однаковим кольором. Під час визначення кольору вік теки до уваги не братиметься.
Ідею подібного розфарбування запозичено з програми dirdiff. Кольори відповідають кольорам листя: воно зелене, коли тільки-но з'являється на деревах, пізніше перетворюється на жовте, а згодом на червоне.
Після порівняння тек KDiff3 намагається визначитися пропозиціями щодо дії з об'єднання. Ці пропозиції буде показано у стовпчику Дія. Ви можете змінити дію натисканням позначки дії, яку ви бажаєте змінити. Програма відкриє невеличке меню, за допомогою якого ви зможете вибрати дію для відповідного пункту. Крім того, ви можете вибрати одну з найпоширеніших дій за допомогою клавіатури. Натискання комбінацій клавіш Ctrl+1/2/3/4/Del призведе до вибору дій A/B/C/Об'єднати/Вилучити, відповідно. Вибрану вами дію буде виконано під час об'єднання. Перелік можливих дій і режим об'єднання залежатиме від вибраного пункту. Можливі такі режими об'єднання:
Об'єднання трьох тек (A вважається старішою базою для двох інших).
Об'єднання двох тек.
Режим синхронізації двох тек (активується за допомогою пункту Синхронізувати теки).
Під час виконання об'єднання трьох тек логіка програми виглядає так: Якщо елемент...
...всі три теки містять однакові файли: копіювання з C
... A і C є однаковими, B відрізняється: копіювати з B (або, якщо B не існує, вилучити файли з A і С)
... A і B є однаковими, C відрізняється: копіювати з C (або, якщо C не існує, вилучити файли з A і B)
... B і C є однаковими, A відрізняється: копіювати з C (або, якщо C не існує, вилучити файли з A)
...існує лише A: вилучення призначення (якщо воно існує)
... існує лише у B: копіювати з B
... існує лише у C: копіювати з C
... A, B і C є різними: об'єднати
... файли у A, B і C належать до різних типів (наприклад у A — це тека, у B — файл): «Помилка: Конфлікти типів файлів». Хоча відповідні елементи і існують, об'єднання тек розпочати неможливо.
Під час виконання об'єднання двох тек логіка програми виглядає так: Якщо елемент...
... є однаковим у обох теках: копіювати з B
... існує у A, але не існує у B: копіювати з A
... існує у B, але не існує A: копіювати з B
... елемент існує у A і B, але він є різним: об'єднати
... файли у A і B належать до різних типів (наприклад у A це тека, у B — файл): «Помилка: Конфлікти типів файлів». Хоча відповідні елементи і існують об'єднання тек розпочати неможливо.
Режим синхронізації буде задіяно, лише якщо виконується порівняння двох тек, а призначення не вказано явним чином, і якщо позначено пункт Синхронізувати теки. У такому разі KDiff3 обере типову дію, після виконання якої обидві теки будуть однаковими. Якщо...
...обидві теки містять однакові файли: ніяких дій виконано не буде.
...існує A, але не існує B: копіювання A до B
...існує B, але не існує A: копіювання B до A
...існують A і B, але вони не збігаються: об'єднання зі збереженням даних результату у обох теках. (Для користувача видимим файлом, куди буде збережено дані буде B, але після зберігання KDiff3 скопіює B до A.)
... файли у A і B належать до різних типів (наприклад у A це тека, у B — файл): «Помилка: Конфлікти типів файлів». Хоча відповідні елементи і існують об'єднання тек розпочати неможливо.
Якщо виконується об'єднання двох тек і позначено пункт Копіювати новіший, замість об'єднання, KDiff3 виконуватиме визначення дат зміни файлів і пропонуватиме вибрати новіший файл. Якщо файли мають різний вміст, але однакову дату зміни, дія міститиме напис «Помилка: Дати однакові, а файли відрізняються». У такому разі, хоча елементи існують, неможливо розпочати об'єднання тек.
Під час об'єднання файли оброблятимуться один за одним. У стовпчику стану буде показано слово Виконано для пунктів, для яких дія з об'єднання була успішною, та інший текст, якщо сталося щось непередбачене. Після завершення дії об'єднання вам слід перевірити, чи для всіх пунктів стан об'єднання є задовільним.
Якщо у параметрах програми увімкнено режим Повний аналіз, KDiff3 покаже додаткові стовпчики з кількістю нерозв'язаних і розв'язаних конфліктів, а також кількістю конфліктів у пробілах і конфліктів, не пов'язаних з пробілами. Стовпчик розв'язаних конфліктів буде показано лише у випадку порівняння або об'єднання трьох тек.
Переліком файлів, показаних у цьому списку, керує декілька параметрів. Доступ до деяких з них можна отримати за допомогою діалогового вікна параметрів. У меню Тека містяться такі пункти:
Показувати однакові файли: показати файли, які програма визначила як однакові у всіх початкових теках.
Показувати різні файли: показати файли, які існують у декількох теках, але не є однаковими.
Показувати файли лише у A: показати файли, які існують лише у A, і яких немає у B і C.
Показувати файли лише у B: показати файли, які існують лише у B, і яких немає у A і C.
Показувати файли лише у C: показати файли, які існують лише у C, і яких немає у A і B.
Позначте пункти Показувати лише для тих елементів, які ви бажаєте бачити у списку. Якщо, наприклад, ви бажаєте бачити у списку лише ті елементи, які існують або у A, або у B, але не у обох теках, вам слід позначити пункти Показувати файли лише у A і Показувати файли лише у B і зняти позначки з усіх інших пунктів (Показувати однакові файли, Показувати різні файли, Показувати файли лише у C). Після внесення змін список буде негайно оновлено відповідним чином.
Ці параметри буде також використано і для тек, за одним винятком: зняття позначки з пункту Показувати різні файли не призведе до приховування жодної з тек. Цей параметр призначено лише для файлів у цих теках.
Зауважте, що серед усіх цих параметрів програма зберігатиме значення лише параметра Показувати однакові файли. Інші пункти буде знову позначено після наступного запуску KDiff3.
Ви можете наказати програмі виконати об'єднання поточного вибраного елемента (файла чи теки) або всіх елементів. Коли ви визначитеся з усіма параметрами дії (у всіх підтеках), можна розпочинати об'єднання.
Пам'ятайте, що якщо ви не вказали теку призначення явно, призначенням буде C у режимі роботи з трьома теками, B у режимі порівняння двох тек, і A або/і B у режимі синхронізації.
Якщо ви вказали теку призначення, вам також слід перевірити, що у ньому наявні всі належні елементи структури. Існують параметри, які можуть призвести до того, що програма не оброблятиме певні елементи під час порівняння і об'єднання тек. Щоб уникнути небажаних сюрпризів, вам слід перевірити наявність позначок навпроти таких пунктів:
Рекурсивні теки: якщо цей пункт не буде позначено, програма не шукатиме у підтеках.
Шаблон включення/виключення: включити/виключити пункти, які відповідають певному критерію
Виключити приховані файли
Пункти показу (Показати однакові/різні файли, Файли лише у A/B/C)
Якщо ви змінили параметри так, що список файлів збільшився, вам слід вручну наказати програмі виконати повторне сканування тек за допомогою пункту меню → . Причиною цього є те, що для пришвидшення порівняння KDiff3 уникає порівняння файлів, які не відповідають вказаним на початку критеріям. Якщо ж ви змінили ваші шаблони файлів або тек так, щоб виключити певні файли, список файлів буде негайно оновлено одразу після закриття діалогового вікна параметрів.
Зауважте, що, якщо ви наказали програмі виконати запис до тільки-но створеної теки, бажано, щоб було скопійовано і однакові файли. Для цього слід позначити пункт Показувати однакові файли. Якщо вашою текою призначення є один з тек з початковими даними, вам не доведеться цього робити, оскільки відповідні файли вже зберігатимуться у цій теці.
Якщо вас все задовольняє, решта дій буде простою.
Щоб наказати програмі об'єднати всі пункти, скористайтеся пунктом з меню або натисніть клавішу F7 (типове клавіатурне скорочення). Щоб наказати програмі об'єднати лише поточний пункт, оберіть пункт Виконати операцію для поточного елемента або натисніть клавішу F6.
Якщо через конфлікт типів файлів у списку існують пункти з некоректними діями, програма відкриє вікно повідомлення, у якому буде вказано перелік цих пунктів, отже ви зможете вибрати належну дію для кожного з таких пунктів.
Якщо ви оберете об'єднання всіх пунктів, програма відкриє діалогове вікно, у якому запропонує вибрати один з варіантів: Зробити це, Імітувати це і Скасувати.
Натисніть кнопку Імітувати це, якщо ви бажаєте просто подивитися, які дії буде виконано без виконання цих дій. Програма покаже вам докладний список дій.
Натисніть кнопку Зробити це, щоб розпочати процедуру об'єднання.
KDiff3 виконає вказану дію для всіх пунктів. Якщо потрібне буде втручання користувача (об'єднання окремого файла), програма відкриє вікно об'єднання (див. великий знімок вікна).
Після завершення об'єднання окремого файла, знову скористайтеся пунктом меню або натисніть клавішу F7. Якщо ви не забули зберегти об'єднаний файл, програма відкриє діалогове вікно, у якому попросить вас це зробити. Потім KDiff3 продовжить обробку наступного з пункту.
Якщо під час виконання KDiff3 дій станеться помилка, програма повідомить вам про неї і покаже докладні відомості про стан. У нижній частині списку міститимуться повідомлення про помилки, які допоможуть вам зрозуміти, у чому полягає проблема. Якщо ви спробуєте продовжити об'єднання (натиснете клавішу F7), KDiff3 надасть вам змогу вибрати між повторенням спроби об'єднання елемента, який спричинив помилку, і його пропуском. Це означає, що перш ніж продовжувати, ви зможете вибрати іншу дію стосовно файла або розв'язати проблему у інших спосіб.
Після завершення процедури об'єднання KDiff3 відкриє вікно повідомлення про завершення дії.
Якщо деякі з елементів було об'єднано окремо, перш ніж було виконано запуск об'єднання тек, KDiff3 врахує це (на час поточного сеансу об'єднання) і не виконуватиме їх повторного об'єднання під час наступного загального об'єднання. Навіть якщо об'єднання було пропущено або результати об'єднання не було збережено, програма вважатиме об'єднання відповідних пунктів завершеним. Стан Виконано з таких елементів буде знято, лише якщо ви зміните дію з об'єднання. Після цього можна буде повторно виконати їх об'єднання.
У вікні параметрів KDiff3 (пункт меню → ) є розділ з назвою «Об'єднання тек» з такими пунктами:
- Рекурсивні теки
За допомогою цього пункту можна увімкнути або вимкнути рекурсивний перегляд тек.
- Шаблони файлів:
У ієрархії буде показано лише файли, назви яких відповідають одному з шаблонів, вказаних у цьому полі. Відокремлювати окремі шаблони у списку слід за допомогою крапки з комою, «;». Можна використовувати шаблони заміни: «*» і «?» (наприклад
*.cpp;*.h). Типовим шаблоном є «*». Цей шаблон не стосується тек.- Шаблон(и) виключення файлів:
Файли, назви яких відповідають вказаному у цьому полі шаблону, буде виключено з ієрархії перегляду. Відокремлювати окремі шаблони у списку слід за допомогою крапки з комою, «;». Можна використовувати шаблони заміни: «*» і «?». Типовим шаблоном є «
*.orig;*.o;*.obj».- Шаблон(и) виключення тек:
Теки, назви яких відповідають вказаному у цьому полі шаблону, буде виключено з ієрархії перегляду. Відокремлювати окремі шаблони у списку слід за допомогою крапки з комою, «;». Можна використовувати шаблони заміни: «*» і «?». Типовим шаблоном є «
CVS;deps;.svn».- Використовувати файл ігнорування
За допомогою цього пункту можна наказати програмі ігнорувати файли і теки, які ігноруватиме також і ваша система керування версіями. Значна кількість з автоматично створених файлів ігноруватиметься CVS. Великою перевагою цього способу є те, що ігнорування виконуватиметься окремо для кожної з тек, за відповідними локальними файлами ігнорування. Докладніший опис таких файлів можна знайти у документації до вашої системи керування версіями.
- Показувати приховані файли і теки
У деяких файлових системах певні файли мають атрибут «прихованих». У інших системах файли, назви яких починаються з крапки, «.», вважаються прихованими. За допомогою цього пункту ви може вказати програмі, чи слід включати подібні файли до ієрархії тек. Типово, цей пункт позначено.
- Йти за посиланнями на файли
Для посилань на файли: якщо цей пункт не буде позначено, програма порівнюватиме символічні посилання. Якщо пункт буде позначено, порівнюватимуться файли за посиланнями. Типово, цей пункт не буде позначено.
- Йти за посиланнями на теки
Призначено для посилань на теки. Якщо пункт не буде позначено, програма порівнюватиме символічні посилання. Якщо ж позначити пункт, програма вважатиме символічне посилання звичайною текою і виконуватиме її рекурсивне сканування. Зауважте, що програма не перевірятиме, чи не є посилання «рекурсивним». Отже, якщо, наприклад, у теці міститься посилання на саму теку, виникне нескінченний цикл, після переповнення стека або пам'яті програма аварійно завершить роботу. Типово, пункт не позначено.
- Порівняння назв файлів з врахуванням регістру
Типовим значенням є false у Windows® і true у інших операційних системах.
- Режим порівняння файлів:
- Двійкове порівняння
Це типовий режим порівняння файлів.
- Повний аналіз
За допомогою цього пункту можна наказати програмі виконувати повний аналіз всіх файлів і показувати статистичні дані (кількість розв'язаних і нерозв'язаних конфліктів, а також кількістю конфліктів у пробілах і конфліктів, не пов'язаних з пробілами) у відповідних стовпчиках. Виконання повного аналізу сповільнить процес порівняння, а також значно уповільнить порівняння файлів, які не є текстовими (вам слід вказати відповідні шаблони виключення файлів).
- Довіряти розміру і даті зміни (небезпечно)
Якщо ви виконуєте порівняння великих тек за допомогою повільного мережевого з'єднання, ймовірно, швидше порівняти дати зміни файлів і довжину файлів окремо. Але подібне пришвидшення може призвести до певних неточностей. Будьте обережними з використанням цього пункту. Типово, цей пункт не позначено.
- Довіряти розміру (небезпечно)
Призначення пункту подібне до пункту щодо довіри даті зміни. Програма не виконуватиме справжнього порівняння. Два файла вважатимуться однаковими, якщо вони мають однаковий розмір. Цей пункт буде корисним, якщо під час дії з копіювання файлів не було збережено дату зміни. Будьте обережними з використанням цього пункту. Типово, цей пункт не позначено.
- Синхронізувати теки
Вмикає режим синхронізації у випадку, коли ви порівнюєте дві теки і не вказали явним чином теку призначення. У цьому режимі дії з об'єднання буде виконано таким чином, що після порівняння обидві початкові теки міститимуть однакові файли. Типово, цей пункт не буде позначено.
- Копіювати новіший, замість об'єднання (небезпечно)
Замість об'єднання буде виконано дію з копіювання новішого варіанта на місце старішого. Цей спосіб може призвести до небезпечних наслідків, оскільки у такому випадку неявним чином вважається, що старіший файл не було змінено. Типово, цей пункт не позначено.
- Створювати резервні копії файлів (.orig)
Якщо файл або цілу теку було замінено іншим або вилучено, до назви його початкової версії буде додано суфікс
.orig. Якщо файл резервної копії з суфіксом.origвже існуватиме, його буде перезаписано без створення резервної копії. Цей пункт стосується звичайного об'єднання окремих файлів, а не лише об'єднання тек. Типово, цей пункт позначено.
Зазвичай, перегляд списку об'єднання тек залишатиметься видимим під час порівняння або об'єднання окремого файла. За допомогою вказівника миші ви можете пересунути смужку роздільника, який відокремлює список файлів від областей відмінностей у тексті. Якщо ж такий варіант вас не влаштовує, ви можете зняти позначку з пункту «Розділений перегляд тексту і тек» меню «Тека». Після цього ви можете скористатися пунктом «Перемкнути перегляд» меню «Тека» для перемикання між списком і переглядом відмінностей у тексті, кожен з яких повністю використовуватиме площу вікна програми.
Ймовірно, ви надасте перевагу простому подвійному клацанню лівою кнопкою миші на позначці файла для його порівняння. Крім того, ви можете скористатися відповідним пунктом з меню . Ви також можете безпосереднього наказати програмі виконати об'єднання окремого файла: достатньо вибрати цей файл і скористатися пунктом з меню . Після зберігання результату стан відповідного пункту у списку буде змінено на «Виконано», програма не виконуватиме повторного об'єднання, якщо ви накажете їй виконати об'єднання цілих тек.
Але зауважте, що ці дані про стан буде втрачено, якщо ви накажете програмі повторно виконати сканування тек: меню , пункт
Іноді у вас виникатиме потреба у порівнянні або об'єднанні файлів з різними назвами (наприклад поточного файла і його резервної копії у цій же теці).
Оберіть потрібний файл натисканням піктограми на стовпчику A, B або C. Перший з файлів, вибраних у такий спосіб буде позначено як A, другий і третій — B і C, незалежно від стовпчика, у якому їх було відкрито. Таким чином можна обирати не більше трьох файлів.
Скористайтеся пунктом або з меню . Для зручності ці пункти меню є і у контекстному меню кожного з файлів. Викликати контекстне меню можна за допомогою наведення вказівника миші на позначку файла з наступним клацанням правою кнопкою миші.
Порівняння або об'єднання файлів відбувається у одному вікні. Якщо цим методом скористатися для тек, програма відкриє нове вікно.
У бібліотеці KIO для Frameworks передбачено можливість прозорої роботи з мережею за допомогою підлеглих засобів вводу-виводу (KIO-slave). KDiff3 використовує ці засоби для читання вхідних файлів і для сканування тек. Це означає, що ви можете вказувати файли і теки, що зберігаються локально або на віддалених комп'ютерах, зазначенням їх адреси URL.
Приклад:
kdiff3 test.cpp ftp://ftp.faraway.org/test.cpp kdiff3 tar:/home/hacker/archive.tar.gz/каталог ./каталог
Перший рядок призначено для порівняння локального файла з файлом, що зберігається на сервері FTP. Другий рядок призначено для порівняння теки з архівом локальної теки.
Серед інших цікавих підпорядкованих засобів вводу-виводу:
Файли з WWW (http:),
Файли з FTP (ftp:),
Шифроване передавання файлів (fish:, sftp:),
Ресурси Windows® (smb:),
Локальні файли (file:),
Серед інших можливостей, які, ймовірно, є менш корисними:
Сторінки Man (man:),
Сторінки Info (info:),
Синтаксис адрес URL відрізняється від синтаксису шляхів локальних файлів і тек. Слід брати до уваги такі особливості:
Шлях може бути відносним і містити позначення тек «.» або «..». Адреси ж URL завжди слід вказувати абсолютними, використовувати подібні позначення ієрархії тек у адресах не можна.
Спеціальні символи слід записувати «екранованими». («#»->«%23», пробіл->«%20» тощо) Наприклад, файл з назвою «/#foo#» має адресу URL «file:/%23foo%23».
Якщо адреси URL не працюють у очікуваний спосіб, спробуйте спочатку відкрити сторінки за цими адресами у Konqueror.
Прозорість роботи з мережею має певні недоліки: не всі ресурси мають однакові можливості.
Іноді причиною цього є файлова система на сервері, іноді — протокол. Ось короткий список обмежень:
Іноді відсутня підтримка посилань.
Іноді програма не може визначити, куди вказує посилання: на файл чи на теку; програма завжди припускає, що на файл. (ftp:, sftp:).
Програма не завжди може визначити розмір файла.
Обмежена підтримка роботи з правами доступу.
У програмі не передбачено можливості зміни прав доступу або часу зміни таких файлів, отже права доступу копії можуть відрізнятися від початкового файла (див. пункт Довіряти розміру (не безпечно)). Зміна прав доступу або часу зміни можлива лише для локальних файлів.
KDiff3 можна використовувати як інструмент перегляду різниць та об'єднання гілок у Git.
Достатньо додати вказані нижче рядки до вашого файла gitconfig.
[diff]
tool = kdiff3
[difftool "kdiff3"]
path = <шлях до виконуваного файла kdiff3 у вашій системі>
[difftool]
prompt = false
keepBackup = false
trustExitCode = false
[merge]
tool = kdiff3
[mergetool]
prompt = false
keepBackup = false
keepTemporaries = false
[mergetool "kdiff3"]
path = <шлях до виконуваного файла kdiff3 у вашій системі
>
Для перегляду відмінностей між двома внесками скористайтеся такою командою: git difftool перший_хеш другий_хеш --tool=kdiff3 --cc якийсь_файл_у_ієрархії_git
Щоб об'єднати гілку за допомогою KDiff3 скористайтеся командою git merge назва_гілки && git mergetool --tool=kdiff3
Після розв'язування конфліктів у звичайний спосіб достатньо просто записати зміни до сховища, щоб досягти мети.
Можливо, цей документ було оновлено з часу, коли ви встановили програму. Останню версію цього документа ви можете знайти за адресою https://docs.kde.org/.
- 5.1. Чому програму названо «KDiff3»?
- 5.2. Чому автор випустив програму з ліцензією GPL?
- 5.3. Немає деяких кнопок і функцій. Що сталося?
- 5.4. Часто рядки, які є подібними, але не однаковими, програма показує поряд один з одним, але іноді вона цього не робить. Чому?
- 5.5. Чому слід розв'язати всі конфлікти, перш ніж програма зможе зберегти результат об'єднання?
- 5.6. Як мені синхронізувати перегляди відмінностей і об'єднання так, щоб у всіх переглядах було показано один фрагмент тексту?
- 5.7. Чому команда git difftool --dir-diff повідомляє про помилку щодо суміші посилань і звичайний файлів, якщо використовувати KDiff3 як інструмент для роботи з відмінностями?
- 5.8. Чому у редакторі вікна об'єднання результатів не передбачено можливості скасування дій?
- 5.9. Після вилучення певного фрагмента тексту несподівано з'явився напис «<Немає рядка джерела>», який неможливо вилучити. Що це означає і як мені вилучити напис?
- 5.10. Чому у KDiff3 не підтримується підсвічування синтаксичних конструкцій?
- 5.11. Чи можна скористатися KDiff3 для порівння файлів LibreOffice/OpenOffice.org®, Microsoft® Word, Microsoft® Excel, PDF тощо?
- 5.12. Куди подівся варіант показу тек Показати лише відмінності?
- 5.13. Як вибрати значний фрагмент даних у вікні вхідних даних відмінностей, адже гортання триває занадто довго?
- 5.14. Тут досить багато відомостей, але немає відповіді на моє питання.
5.1. | Чому програму названо «KDiff3»? |
Вже існували інструменти з назвами KDiff і KDiff2 (тепер називається Kompare). Крім того, KDiff3 має означати, що програма може виконувати об'єднання подібно до інструменту diff3 зі збірки інструментів Diff. | |
5.2. | Чому автор випустив програму з ліцензією GPL? |
Автор почав користуватися GPL-програмами дуже давно і багато чому навчився, вивчаючи вихідні коди інших програм. Отже, він хотів би сказати «Дякую!» всім програмістам, які самі пишуть програми під цією ліцензією або мають намір їх написати. | |
5.3. | Немає деяких кнопок і функцій. Що сталося? |
Ви зібрали програму з початкових кодів, але, ймовірно, не вказали належного префікса для встановлення. За типових умов програму буде встановлено до | |
5.4. | Часто рядки, які є подібними, але не однаковими, програма показує поряд один з одним, але іноді вона цього не робить. Чому? |
Спочатку, рядки, які відрізняються лише кількістю пробілів, вважатимуться «рівними», якщо ж у рядку буде знайдено хоча б один відмінний непробільний символ, вони вважатимуться «різними». Якщо однакові рядки розташовано поруч один з одним, насправді це випадковість, але, на щастя, ця випадковість трапляється досить часто. Див/ також довідку з порівняння вручну. | |
5.5. | Чому слід розв'язати всі конфлікти, перш ніж програма зможе зберегти результат об'єднання? |
Редактор запам'ятовує розташування початку і кінця кожного з однакових і різних фрагментів тексту у вікні результатів об'єднання. Це потрібно для того, щоб ви мали можливість вирішувати конфлікти вручну простим вибором джерела натисканням кнопки джерела (A, B або C). Дані щодо розташування буде втрачено після завершення роботи програми, а створення спеціального формату файлів, який би підтримував зберігання і відновлення всіх потрібних даних, є занадто складним завданням. | |
5.6. | Як мені синхронізувати перегляди відмінностей і об'єднання так, щоб у всіх переглядах було показано один фрагмент тексту? |
Натисніть стовпчик резюме, розташований ліворуч від тексту. (Див. також тут.) | |
5.7. | Чому команда |
Це побіжний ефект роботи внутрішніх механізмів git. Якщо ви спробуєте порівняти попередню модифікацію із поточним робочим деревом, git, насправді, порівняє файли, які відповідають попередньому внеску із символічними посиланнями, які вказують на об'єкти у робочому дереві. У версії 1.9 KDiff3 типово увімкнено Переходити за посиланнями на файли і Переходити за посиланнями на теки. У попередніх версіях ці можливості було типово вимкнено. Це не мало значення, якщо було також вимкнено «Повний аналіз». Втім, якщо увімкнено Повний аналіз, KDiff3 спочатку намагається порівняти шлях, на який вказує порівняння, а не перейти за ним. До версії 1.8 отримане повідомлення про помилку ігнорувалося. Втім, з версії 1.8 програма почала повідомляти про помилку. | |
5.8. | Чому у редакторі вікна об'єднання результатів не передбачено можливості скасування дій? |
А навіщо? Ви завжди можете відновити версію з одного з джерел (A, B або C) натисканням відповідної кнопки. Крім того, для значного редагування файлів краще скористатися спеціалізованим редактором. | |
5.9. | Після вилучення певного фрагмента тексту несподівано з'явився напис «<Немає рядка джерела>», який неможливо вилучити. Що це означає і як мені вилучити напис? |
Редактор запам'ятовує розташування початку і кінця кожного з однакових і різних фрагментів тексту у вікні результатів об'єднання. «<Немає рядка джерела>» означає, що у відповідному фрагментів не залишилося нічого, навіть символу нового рядка. Подібна ситуаціям може виникнути або під час автоматичного об'єднання або під час редагування. Ніякої проблеми у появі відповідного рядка немає, оскільки його не буде у файлі, який буде збережено програмою. Якщо ви бажаєте повернути початковий вміст фрагмента, просто виберіть цей фрагмент за допомогою стовпчика резюме і натисніть відповідну кнопку джерела з належним вмістом (A/B або C). | |
5.10. | Чому у KDiff3 не підтримується підсвічування синтаксичних конструкцій? |
KDiff3 вже використовує значну кількість кольорів для підсвічування відмінностей. Додаткове підсвічування лише заплутає перегляд. Для такого підсвічування скористайтеся іншим редактором. | |
5.11. | Чи можна скористатися KDiff3 для порівння файлів LibreOffice/OpenOffice.org®, Microsoft® Word, Microsoft® Excel, PDF тощо? |
Хоча KDiff3 може аналізувати файли будь-яких типів, у таких випадках результат буде не зовсім тим, на який ви очікували. KDiff3 було створено для порівняння суто текстових файлів. LibreOffice/OpenOffice.org®, Microsoft® Word, Microsoft® Excel тощо зберігають у файлах багато даних щодо шрифтів, зображень, сторінок, кольорів тощо, про які KDiff3 нічого не відомо. Отже KDiff3 покаже вам вміст відповідного файл так, наче це простий текст, але у такому випадку текст може стати непридатними для читання або, принаймні, виглядатиме досить дивно. Оскільки більшість сучасних програм зберігають вміст у форматі XML, ви можете виконати читання подібних файлів як файлів зі звичайним текстом. Якщо зміни не дуже значні, KDiff3 зможе допомогти вам у них розібратися. Найкращим розв'язанням цієї проблеми, якщо ви бажаєте порівняти лише текст (без вбудованих об'єктів, на зразок зображень), буде таке: скористайтеся пунктами і меню відповідної програми, щоб скопіювати весь потрібний текст до буфера обміну даними, а потім вставте у KDiff3 відповідний текст до будь-якої з областей порівняння (див. також Вибір, копіювання і вставка.) | |
5.12. | Куди подівся варіант показу тек ? |
Тепер у меню декілька варіантів показу. Якщо ви знімете позначку з пункту , ви отримаєте той варіант, який раніше можна було створити позначенням пункту . | |
5.13. | Як вибрати значний фрагмент даних у вікні вхідних даних відмінностей, адже гортання триває занадто довго? |
Розпочніть вибір у звичайний спосіб (натисніть і утримуйте ліву кнопку миші). Після цього скористайтеся навігаційними клавішами (тобто клавішами на зразок PgUp, PgDn), одночасно утримуючи натиснутою ліву кнопку миші. (Див. також Вибір, копіювання і вставка.) | |
5.14. | Тут досить багато відомостей, але немає відповіді на моє питання. |
Будь ласка, надішліть ваше питання автору. Він цінує кожен коментар користувача. |
KDiff3 — інструмент для порівняння і об'єднання файлів та тек
Авторські права на програму належать Joachim Eibl (joachim.eibl at gmx.de), ©2002-2007
Декілька чудових ідей та звітів про помилки було надіслано колегами-програмістами та багатьма людьми з великої всесвітньої мережі. Дякую вам!
Авторські права на документацію (c) 2002-2007 Joachim Eibl (joachim.eibl at gmx.de)
Авторські права на документацію належать Michael Reeves (reeves.87 at gmail.com), 2017-2019
Переклад українською: Юрій Чорноіван (yurchor AT ukr.net)
Цей документ поширюється за умов дотримання GNU Free Documentation License.
Ця програма поширюється за умов дотримання GNU General Public License.