Kdiff3 как пользоваться
Перейти к содержимому

Kdiff3 как пользоваться

  • автор:

Kdiff3 как пользоваться

Народ, может кто уже использует его для сравнения и объединения баз, пожскажите, как им пользоваться, в частности какую кодировку поставить, а то он всякий мусор выводит.

Иногда меня нет, например, я в ремонте или на профилактике. Но сейчас со мной все ок и я поднимаю эту ветку.

Хм.
KDiff3 is a graphical text difference analyzer for up to 3
input files, provides character-by-character analysis and a
text merge tool with integrated editor. It can also compare
and merge directories. Platform-independant.
. как им объединять базы я не знаю 🙂
Тексты модулей — как два байта переслать 🙂
Есть еще вариант — разбирать ДжиКомпом, пройтись по текстам Кдифом, собрать обратно
ЗЫ. Так что те надоть то?

Лайфхак для экономии времени при обновлении конфигурации ДАЛИОН на поддержке

С версии 1С: Предприятие 8.3.6.1977 появилась возможность использовать при обновлении конфигурации внешние специализированные программы, которые предназначены для автоматического сравнения и объединения текстовых модулей. Такие программы позволяют значительно уменьшить необходимость ручной корректировки объединенного кода при обновлении.

Обратите внимание, что внешние программы могут быть использованы только для объединения текстовых модулей!

В качестве внешних программ можно выбрать одну из следующих:

  • Araxis Merge
  • DiffMerge
  • Kdiff3 (рекомендуем использовать)
  • TortoiseMerge
  • Perforce P4Merge

Все перечисленные программы используют одинаковый алгоритм – они сравнивают файл старой конфигурации поставщика (например, релиз ДАЛИОН: ТРЕНД 2.0.8) с файлами основной конфигурации (в которой на текущий момент работает магазин) и новой конфигурации поставщика (например, релиз ДАЛИОН: ТРЕНД 2.0.9). Из основной конфигурации и новой конфигурации поставщика автоматически берутся все непересекающиеся изменения. При наличии пересекающихся изменений их необходимо отредактировать вручную.

Внешние программы анализируют код без разбивки на отдельные процедуры и автоматически обрабатывают ситуации, когда меняется только имя процедуры или функции.

Для того, чтобы использовать внешнюю программу при обновлении конфигурации, необходимо:

1. Установить одну из специализированных внешних программ на компьютер.

2. Открыть параметры конфигуратора и на закладке «Сравнение/объединение» указать для внешней программы путь к исполняемому файлу по кнопке «Изменить».

obnovlenie_dalion.png

3. Указать выбранную программу в блоке «Обновление конфигурации на поддержке».

obnovlenie_dalion_1.png

Далее, при обновлении, если были внесены изменения в код основной конфигурации, в строке «Фильтр» указываем значение – Показывать только дважды измененные свойства (см. скриншот ниже). В колонке «Режим объединения и порядок подчиненных объектов» выбираем из выпадающего списка вариант – Объединить с помощью внешней программы и нажимаем на иконку шестеренки в левом столбце.

obnovlenie_dalion_2.png

Откроется внешняя программа, которая автоматически обработает конфликты, не требующие ручной корректировки (непересекающиеся изменения).

obnovlenie_dalion_3.png

При необходимости можно вручную отредактировать разрешенные автоматически конфликты.

Все пересекающиеся изменения следует отредактировать вручную. Для их поиска используйте кнопки , расположенные на верхней панели. Пересекающиеся изменения выделены квадратом красного цвета в 3 столбцах (см. скиншот ниже).

Для корректировки изменений можно:

  • использовать кнопки obnovlenie_dalion_5.pngс верхней панели.
    • А – будет взят код из старой конфигурации поставщика,
    • В – будет взят код из основной конфигурации,
    • С – будет взят код из новой конфигурации поставщика.
  • отредактировать код вручную в тестовом поле.

obnovlenie_dalion_6.png

После того, как все конфликты будут разрешены, следует обязательно сохранить изменения и закрыть программу.

Обзор инструментов для визуального сравнения и разрешения конфликтов слияния

На хабре уже было много статей о распределенных системах управления версиями (DVCS), их сравнений, а также сравнений GUI-клиентов для них. Также были обсуждения плагинов к IDE для работы с git и mercurial. Но практически не было информации об инструментах визуального сравнения и разрешения конфликтов слияния.

diff and merge

Недавно я «перескочил» с mercurial (который до сих пор считаю более удобным и логичным) на git, потому что, подавляющее большинство проектов, которые мне интересны, используют git и хостятся на github. В связи с этим, встал вопрос о пересмотре арсенала инструментов, в частности вопрос выбора инструмента визуального сравнения и слияния (diff and merge). Дабы восполнить недостаток информации на хабре, я решил написать этот мини-обзор. Как говориться — по горячим следам.

KDiff3

  • бесплатен;
  • поддерживает трехстороннее слияние;
  • умеет сравнивать директории;
  • с различными кодировками работает нормально;
  • без дополнений не подсвечивает синтаксис.

DiffMerge

  • бесплатен;
  • поддерживает трехстороннее слияние;
  • умеет сравнивать директории.
  • бывают проблемы при работе с кириллицей. Думаю, со временем, исправят.
  • DiffMerge по умолчанию, не поддерживает подсветку синтаксиса языков программирования.

WinMerge

  • Open Source;
  • никаких проблем с кодировками;
  • подсветка синтаксиса без лишних телодвижений;
  • сравнение директорий.
  • инструмент слияния является двусторонним, что может создавать неудобства в некоторых случаях;
  • Windows only.

Meld

  • GPL v2;
  • двустороннее и трехстороннее слияние файлов;
  • сравнение директорий;
  • подсветка синтаксиса (при установленном GtkSourceView).
  • для установки под Windows требуется установить Python, GTK+, Glib, GtkSourceView, что не каждому понравиться.

Diffuse

  • GPL;
  • поддержка 2-way, 3-way и n-way (произвольное количество файлов) слияния;
  • подсветка синтаксиса;
  • отлично работает с UTF-8;
  • неограниченная глубина отмен (Undo);
  • удобная навигация по коду.
  • разве что, невозможность сравнивать директории.

TKDiff

  • GPLv2;
  • можно добавлять закладки для различий;
  • с кодировками работает нормально;
  • интерфейс менее удобен и выглядит очень бедно (см. скриншот), чем у других продуктов.
  • нет подсветки синтаксиса;
  • не умеет сравнивать директории.

SmartSynchronize

  • трехстороннее слияние;
  • нет проблем с кодировками;
  • помимо файлов, может сравнивать директории.
  • для коммерческого использования требуется лицензия;
  • подсветка синтаксиса для языков программирования по умолчанию не предусмотрена. Не исключено, что можно как-то сделать.

BeyondCompare

  • трехстороннее слияние;
  • может сравнивать файлы, директории, удаленные директории, архивы, а также MP3-файлы, изображения и др. Но последние пункты — это в принципе не нужный функционал.
  • ShareWare;
  • нет версии под Mac.

Araxis Merge

  • трехстороннее слияние;
  • нет проблем с кодировками;
  • подсвечивает синтаксис;
  • помимо файлов, может сравнивать директории и синхронизировать их;
  • хорошо работает на сравнении больших файлов (гигабайты) и больших директорий;
  • генерация отчётов по результатам сравнения.
  • Ribbon-интерфейс (если это можно назвать плюсом).
  • ShareWare;
  • нет версии под Linux.

Git и DiffMerge

1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
файл diffmerge следующего содержания:

diff_cmd () < "c:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 > merge_cmd () < "c:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe" \ --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE" >/dev/null 2>&1 status=$? > 

2) Теперь добавим в файл c:/Users/swipe/.gitconfig
следующие строки:

[diff] tool = diffmerge [merge] tool = diffmerge [mergetool "diffmerge"] cmd = "diffmerge" trustExitCode = true 

3) Создадим конфликт и вызовем DiffMerge для его разрешения

git init // инициализируем репозиторий создадим пустой файл readme.txt git add . // добавим созданный файл в индекс git commit -m "empty readme" // зафиксируем изменения git branch new // создадим новую ветку git checkout new // переключимся на новую ветку добавим строку в файл readme.txt git add . // добавим изменения в индекс git commit -m "new string" // зафиксируем изменения в новой ветке git checkout master // переключися на master ветку добавим изменения в файл readme.txt git add . // добавим изменения в индекс git commit -m "master string" // зафиксируем их git hist --all // посмотрим на дерево 

tree

git difftool master new // сравним две ветви

diff

git merge new // сольем изменения в new с веткой master

conflict

Выводится сообщение о конфликте слияния, чего мы и добивались.

git mergetool // разрешим этот конфликт

merge

В среднем окне, приведем файл к требуемому состоянию и сохраним изменения.
Конфликт разрешен.
Настройку DiffMegre подсмотрел тут:
http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/

Git и WinMerge

1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
файл winmerge следующего содержания:

diff_cmd () < "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 > merge_cmd () < "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 status=$? > 

Когда Git не может автоматически объединить изменения, происходит конфликт слияния и в конфликтующий файл добавляются маркеры слияния (>>>>>>). Они необходимы для разрешения конфликта с помощью сторонних инструментов.
Рассмотрим файл readme.txt который образуется в результате выполнения слияния веток master и new в приведенном выше примере:

Мы можем открыть файл конфликтов с помощью программы WinMerge для разрешения конфликта.

open

После этого откроется средство двухстороннего слияния:

winmerge

Исходя из описанной логики перепишем команду слияния merge_cmd следующим образом:

merge_cmd () < "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? > 

По сути, оба приведенных варианта эквивалентны.

2) Отредактируем .gitconfig

[diff] tool = winmerge [difftool "winmerge"] cmd = "winmerge" [merge] tool = winmerge [mergetool "winmerge"] cmd = "winmerge" trustExitCode = false keepBackup = false 

последняя строчка отменяет сохранение backup-файлов в директории репозитория.

3) Создадим конфликт при слиянии двух веток (см. пример с использованием DiffMerge).

git difftool master new // сравним две ветви

windiff

Для разрешения конфликта при слиянии веток, воспользуемся командой

git mergetool

Pro Git

K0001

Далее в Directory снимаем указанную галку. Это делается, чтобы KDiff не оставляла файлы с расширением .orig.

K0009

Теперь настраиваем confgi Git’a так:

[diff] tool = p4m tool = kdiff3 [difftool "p4m"] cmd = "p4merge.exe $LOCAL $REMOTE" [difftool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe [difftool] prompt = false keepBackup = false trustExitCode = false [merge] tool = p4m tool = kdiff3 [mergetool] prompt = false keepBackup = false keepTemporaries = false [mergetool "p4m"] cmd = "p4merge.exe $BASE $LOCAL $REMOTE $MERGED" trustExitCode = true [mergetool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe

В данном конфиге у нас уже уже определены две внешние утилиты сравнения и слияния KDiff3 и P4Merge. В редакторе Far manager это выглядит так:

K0010

Ну и теперь проверяем все это в Git. Для этого даем команду

$ git difftool c258082 ffd6b37 —tool=kdiff3 —cc test.txt

K0011

И видим запустившееся окно утилиты KDiff3 без того чтобы Git задавал лишние вопросы (это мы настроили в конфиге).

K0012

И так сравнение с помощью KDiff3 работает. И кстати “мусора” (файла с расширением .orig) после выхода из KDiff3 не наблюдается. Теперь проверяем слияние. Даем команды:

$ git merge newbranch
$ git mergetool —tool=kdiff3

K0013

И получаем всплывшее окошко KDiff3 в котором нам сообщили о количестве конфликтов и т.д и т.п. Кстати, появление этого информационного окна можно отключить в настройках KDiff3.

K0014

Далее смотрим конфликт.

K0015

Разрешаем его, жмем сохранить и выходим из KDiff3

K0016

И благодаря нашим настройкам рабочий каталог остается без “мусора”, остается только сделать коммит, чтобы зафиксировать изменения.

Ну или дать команду

$ git merge —abort

Чтобы отменить слияние.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *