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. Открыть параметры конфигуратора и на закладке «Сравнение/объединение» указать для внешней программы путь к исполняемому файлу по кнопке «Изменить».
3. Указать выбранную программу в блоке «Обновление конфигурации на поддержке».
Далее, при обновлении, если были внесены изменения в код основной конфигурации, в строке «Фильтр» указываем значение – Показывать только дважды измененные свойства (см. скриншот ниже). В колонке «Режим объединения и порядок подчиненных объектов» выбираем из выпадающего списка вариант – Объединить с помощью внешней программы и нажимаем на иконку шестеренки в левом столбце.
Откроется внешняя программа, которая автоматически обработает конфликты, не требующие ручной корректировки (непересекающиеся изменения).
При необходимости можно вручную отредактировать разрешенные автоматически конфликты.
Все пересекающиеся изменения следует отредактировать вручную. Для их поиска используйте кнопки , расположенные на верхней панели. Пересекающиеся изменения выделены квадратом красного цвета в 3 столбцах (см. скиншот ниже).
Для корректировки изменений можно:
- использовать кнопки
с верхней панели.
- А – будет взят код из старой конфигурации поставщика,
- В – будет взят код из основной конфигурации,
- С – будет взят код из новой конфигурации поставщика.
- отредактировать код вручную в тестовом поле.
После того, как все конфликты будут разрешены, следует обязательно сохранить изменения и закрыть программу.
Обзор инструментов для визуального сравнения и разрешения конфликтов слияния
На хабре уже было много статей о распределенных системах управления версиями (DVCS), их сравнений, а также сравнений GUI-клиентов для них. Также были обсуждения плагинов к IDE для работы с git и mercurial. Но практически не было информации об инструментах визуального сравнения и разрешения конфликтов слияния.
Недавно я «перескочил» с 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 // посмотрим на дерево
git difftool master new // сравним две ветви
git merge new // сольем изменения в new с веткой master
Выводится сообщение о конфликте слияния, чего мы и добивались.
git mergetool // разрешим этот конфликт
В среднем окне, приведем файл к требуемому состоянию и сохраним изменения.
Конфликт разрешен.
Настройку 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 для разрешения конфликта.
После этого откроется средство двухстороннего слияния:
Исходя из описанной логики перепишем команду слияния 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 // сравним две ветви
Для разрешения конфликта при слиянии веток, воспользуемся командой
git mergetool
Pro Git
Далее в Directory снимаем указанную галку. Это делается, чтобы KDiff не оставляла файлы с расширением .orig.
Теперь настраиваем 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 это выглядит так:
Ну и теперь проверяем все это в Git. Для этого даем команду
$ git difftool c258082 ffd6b37 —tool=kdiff3 —cc test.txt
И видим запустившееся окно утилиты KDiff3 без того чтобы Git задавал лишние вопросы (это мы настроили в конфиге).
И так сравнение с помощью KDiff3 работает. И кстати “мусора” (файла с расширением .orig) после выхода из KDiff3 не наблюдается. Теперь проверяем слияние. Даем команды:
$ git merge newbranch
$ git mergetool —tool=kdiff3
И получаем всплывшее окошко KDiff3 в котором нам сообщили о количестве конфликтов и т.д и т.п. Кстати, появление этого информационного окна можно отключить в настройках KDiff3.
Далее смотрим конфликт.
Разрешаем его, жмем сохранить и выходим из KDiff3
И благодаря нашим настройкам рабочий каталог остается без “мусора”, остается только сделать коммит, чтобы зафиксировать изменения.
Ну или дать команду
$ git merge —abort
Чтобы отменить слияние.