Kdiff3 1c как пользоваться приложением
+1
Нормально и толково заработал только KDiff3
Очень удобно. Безумно понравилось. Время обновления очень сильно перепиленной БП 3.0 сократилось чуть ли не в 1,5 - 2 раза.
Для обновления конфигураций на поддержке с трёхсторонним сравнением/объединением текстов модулей просто незаменимая штука.
2. Один из предварительно настроенных (Araxis, KDiff)
5. Perforce P4Merge - последний в списке, но реально крут! Буду копать дальше, а пока провёл обновление версии ЭСТИ: УФФ для УНФ на новый релиз УНФ. Эффективность автоматического объединения на опробованном релизе - 100%, удобство на пятёрку по пятибалльной шкале! Безусловный фаворит, будем ковырять дальше.
Выводы: нужно ставить KDiff3 и Perforce P4Merge и изучать их работу в разных ситуациях, но Perforce P4Merge пока что выглядит лучшим.
2. Один из предварительно настроенных (Araxis, KDiff)
(4) там есть триал бесплатный..
еще живой.. вот держи
Your fully functional 30-day evaluation serial number for the Professional Edition of Merge is:
он дает прирос в сравнении со старым вариантом сравнения (без итогового окошка снизу) или в сравнении с новым (там где итоговое окошко снизу)
Наконец-то восьмерочники смогут пользоваться тем, чем семорочники вовсю пользовали 10 лет назад :-)
(10) > прирос в сравнении со старым вариантом сравнения (без итогового окошка снизу) или в сравнении с новым (там где итоговое окошко снизу)
Выдержка из ссылки в (3):
Большим плюсом KDiff3 является ее возможность выполнять 3х-стороннее объединение без участия пользователя при отсутствии конфликтов. Это означает, что, например, для всех дважды измененных модулей можно установить режим объединения с помощью внешней программы и запустить объединение. Окно KDiff3 будет появляться только для тех модулей, у которых программа обнаружила конфликты. Модули без конфликтов будут объединяться без участия пользователя.
Если выбрать другую программу, поддерживающую 3х-стороннее объединение, но не поддерживающую автоматическое 3х-стороннее, по при выполнении объединения программа будет открываться на каждый модуль с режимом "объединить с помощью внешней программы".
Справедливости ради нужно сказать, что у Araxis имеет Automation API с примерами использования, с помощью которого несложно сделать утилиту командной строки, которая будет вести себя, как KDiff3.
Также к сведению:
В 8.3.6 при объединении сначала запускается объединение модулей. Если были такие модули, для которых запускалась внешняя программа, и пользователь не сохранил результат работы, то объединение будет прервано. Такие модули в дереве отметятся как конфликтные, и пользователь должен будет их объединить (или выбрать другой режим), чтобы продолжить объединение.
(9) В любом случае стало быстрее. Что новое, что старое стандартное сравнение не умеет автоматически разрешать конфликты; KDiff и прочие внешние программы - умеют. Поэтому при объединении внешней программой надо только проверить/разрешить неразрешенные конфликты, а при стандартном - все ручками.
Единственный минус - внешние программы про синтаксис 1с ничего не знают и потому выдают весь модуль сплошным полотном и без подсветки синтаксиса.
Раньше сравнение и объединение программных модулей могло быть довольно трудоёмкой операцией, если приходилось объединять два модуля, в каждом из которых есть разные изменения относительно исходной конфигурации. Перед объединением можно было посмотреть различия в модулях, но внести изменения в получившийся код можно было только после объединения модулей. При большом количестве изменений в модулях такой подход отнимал очень много времени и мог приводить к ошибкам.
Чтобы облегчить сравнение и объединение модулей, мы добавили в платформу две новые возможности. Во-первых - возможность редактировать результат объединения модулей сразу же в том окне, в котором отображаются их отличия. Во-вторых - возможность использовать для сравнения и объединения модулей не средства платформы 1С:Предприятие, а одну из специализированных сторонних программ.
Редактирование результата объединения в окне настройки объединения модулей
Прежде всего мы немного изменили окно объединения конфигураций. Появилась дополнительная колонка, в которой пиктограммой отображается возможность настройки объединения для данного свойства.
А в окне настройки объединения модулей теперь всегда показывается результат будущего объединения. И вы можете сразу же изменить будущий текст модуля так, как этого требует логика вашего приложения:
Использование внешней программы
Существует целый ряд сторонних специализированных программ, с помощью которых можно выполнять объединение модулей. Если вам недостаточно встроенных возможностей 1С:Предприятия, или если вы привыкли использовать одну из сторонних программ, вы можете подключить её в настройках конфигуратора и использовать для сравнения, настройки объединения и собственно объединения модулей конфигурации.
Для самых распространённых программ в конфигураторе 1С:Предприятия уже содержатся параметры командной строки для их запуска в различных режимах:
При желании вы можете использовать и другие программы, которые поддерживают запуск из командной строки. Их параметры вам нужно будет добавить в настройки конфигуратора самостоятельно.
Преимущества использования внешних программ
В процессе сравнения/объединения конфигураций существуют три основные операции:
- Показ различий без учета структуры (сравнение двух файлов);
- Объединение двух конфигураций (объединение двух файлов);
- Обновление конфигурации, находящейся на поддержке (трехстороннее объединение).
Для п.п. 1 и 2 использование внешних программ имеет только «вкусовые» преимущества. Кому-то больше нравится работать с той или иной программой, нежели со встроенным в платформу инструментом.
Однако в п.3 использование внешних программ позволяет значительно сократить ваше участие в обновлении конфигурации.
В случае 1С:Предприятия в трёхстороннем объединении участвуют: основная конфигурация, старая конфигурация поставщика и новая конфигурация поставщика. Алгоритм, который используют внешние программы для такого объединения, отличается от алгоритма, используемого встроенными инструментами платформы. Файл, являющийся общим предком (старая конфигурация поставщика), они сравнивают с двумя другими файлами (основной конфигурацией и новой конфигурацией поставщика). Из основной конфигурации и новой конфигурации поставщика они берут изменения, если эти изменения не пересекаются. А если они пересекаются, то это конфликт, который вы должны разрешить вручную.
Благодаря такому подходу значительно сокращается необходимость ручной правки объединённого кода. Кроме этого внешние программы анализируют код без разбивки на отдельные процедуры и умеют автоматически обрабатывать ситуации, когда меняется только имя процедуры или функции.
В конфигураторе для каждой операции сравнения/объединения существует отдельная настройка. Ниже мы расскажем об этом более подробно.
Показ различий в модулях
С помощью внешней программы вы можете просматривать различия в модулях. Для этого в настройках конфигуратора эта программа должна быть выбрана в свойстве Показать различия без учета структуры:
Если после этого в окне сравнения/объединения выбрать какой-нибудь модуль и выполнить команду Показать различия в модулях без учета структуры . то для выполнения этой операции будет использована выбранная вами внешняя программа:
Настройка объединения модулей
Внешнюю программу вы можете использовать для настройки объединения модулей. Для этого в настройках конфигуратора эта программа должна быть выбрана в свойстве Настройка объединения двух конфигураций:
Если после этого в окне сравнения/объединения выбрать какой-нибудь модуль и выполнить команду Настройка объединения . (или нажать на шестерёнку, что то же самое), то для выполнения этой операции будет использована выбранная вами внешняя программа:
Обновление конфигурации на поддержке
Ещё одна операция, которую можно выполнять с помощью внешней программы - обновление конфигурации, находящейся на поддержке. Для этого в настройках конфигуратора эта программа должна быть выбрана в группе свойств Обновление конфигурации на поддержке:
Если после этого выполнить команду Конфигурация - Поддержка - Обновить конфигурацию, или попытаться настроить объединение модулей, для которых установлен режим объединения с помощью внешней программы, то для выполнения этих операций будет использована выбранная вами внешняя программа:
Там же приведен макрос для Notepad++, алгоритм которого я и взял за основу для настройки KDiff3.
Также в несколько строк и не очень внятно (размыто по тексту) об этом сказано на ИТС в Приложении 2 стандарта Технология разветвленной разработки конфигураций.
О процессе собственно обновления конфигураций на поддержке я нашел только:
Перейдем к делу, детали позже.
Если KDiff3 еще не установлена, дистрибутив находится здесь. Последняя версия на момент публикации 0.9.98.
Процесс установки тривиален, на этом останавливаться не будем.
Запускаем KDiff3, в диалоге выбора файлов просто жмем ОК.
Переходим к настройкам:
1. Settings – Configure KDiff3…
2. Переходим на вкладку Diff
3. И в поле Preprocessor command вводим такой текст:
4. Жмем Ok. Готово.
Введем с левой стороны такой текст (надо просто скопипастить):
А с правой – такой:
В результате должно получиться так:
Для сравнения, так было без этих настроек:
Как видно, ненужные нам номера строк заменены на символы ‘N’.
Но если вдруг случилось, что такой же текст встречается в коде, то он останется как есть.
Разберем подробно Preprocessor command:
Как сказано в документации, файлы, которые мы передаем KDiff3, перед сравнением проходят через препроцессор.
Препроцессор – это внешняя команда, указанная в настройке Preprocessor command.
В данном случае такой внешней командой является утилита sed.exe. Она расположена там же, где и исполняемый файл KDiff3 (у меня в C:\Program Files\KDiff3\bin\).
Т.е. первая часть Preprocessor command – это вызов утилиты sed.exe.
Утилита вызывается с командой s. Синтаксис этой команды: 's/regexp/replacement/flags'. Подробнее здесь.
В каждой строке исходного файла утилита ищет фрагменты, соответствующие выражению regexp, и если находит, то заменяет их по правилам, указанным в replacement. Флаги flags мы здесь не используем.
Различные примеры использования команды есть в документации KDiff3.
Самый простой пример: команда 's/EFGH/1234/' заменит первое вхождение EFGH на 1234.
Попробуйте ввести в командной строке Windows:
Должно получиться:
Команда echo просто выводит текст в стандартный вывод.
А символ '|' перенаправляет вывод предыдущей команды на вход следующей.
Пойдем дальше.
Фрагменты вида \xD0\x9E – как вы наверное догадались, это символы кириллицы в кодировке UTF8.
Если бы утилита sed понимала кириллицу, то команда была бы такой:
Теперь, когда буков стало меньше, дальше разобраться будет проще.
Утилита sed может принимать несколько команд. Отдельные команды разделяются символом ';'. Команды выполняются последовательно. Выход предыдущей является входом для следующей (но в данном случае мы эту возможность не используем).
В нашем случае по очереди выполняются две команды:
Разберем только первую. Вторая построена аналогично, и она чуть проще.
Наше выражение regexp (один из вариантов синтаксиса описан здесь) состоит из следующих элементов:
^ – начало строки;
[ \x09]* – 0 или более символов пробела или табуляции в любом сочетании;
.\+ – 1 или более любых символов;
[0123456789]\+ – 1 или более числовых символов в любом сочетании;
$ – конец строки.
Остальные фрагменты представляют сами себя.
Некоторые части выражения regexp могут быть взяты в скобки \(, \). То, что между этими скобками, становится самостоятельным подвыражением. А исходный текст, найденный с помощью такого подвыражения, запоминается как обратная ссылка. Каждой паре скобок соответствует отдельная обратная ссылка. Обратные ссылки нумеруются в порядке следования подвыражений слева направо, начиная с 1.
Обратные ссылки можно использовать в выражении replacement, обращаясь к ним по номерам: \1, \2 и т.д.
Таким образом, мы ищем такие строки, которые:
- начинаются с нуля или более пробелов или табуляций,
- вслед за которыми следует текст "Объект присутствует только в",
- далее 0 или более любых символов, пока не встретим
- фрагмент " конфигурации:",
- далее пробел, число, пробел, '-', пробел, число,
- и на этом строка обязательно должна закончиться.
При этом мы запоминаем текст от начала строки до символа ':' как обратную ссылку номер 1.
Если такая строка найдена, она будет заменена в соответствии с выражением replacement: \1 N - N.
Здесь все значительно проще.
Мы подставляем обратную ссылку номер 1, т.е. исходную строку до символа ':', и добавляем текст " N - N".
На хабре уже было много статей о распределенных системах управления версиями (DVCS), их сравнений, а также сравнений GUI-клиентов для них. Также были обсуждения плагинов к IDE для работы с git и mercurial. Но практически не было информации об инструментах визуального сравнения и разрешения конфликтов слияния.
Недавно я «перескочил» с mercurial (который до сих пор считаю более удобным и логичным) на git, потому что, подавляющее большинство проектов, которые мне интересны, используют git и хостятся на github. В связи с этим, встал вопрос о пересмотре арсенала инструментов, в частности вопрос выбора инструмента визуального сравнения и слияния (diff and merge). Дабы восполнить недостаток информации на хабре, я решил написать этот мини-обзор. Как говориться — по горячим следам.
KDiff3
- бесплатен;
- поддерживает трехстороннее слияние;
- умеет сравнивать директории;
- с различными кодировками работает нормально;
- без дополнений не подсвечивает синтаксис.
DiffMerge
- бесплатен;
- поддерживает трехстороннее слияние;
- умеет сравнивать директории.
- бывают проблемы при работе с кириллицей. Думаю, со временем, исправят.
- DiffMerge по умолчанию, не поддерживает подсветку синтаксиса языков программирования.
WinMerge
- Open Source;
- никаких проблем с кодировками;
- подсветка синтаксиса без лишних телодвижений;
- сравнение директорий.
- инструмент слияния является двусторонним, что может создавать неудобства в некоторых случаях;
- Windows only.
- 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
- трехстороннее слияние;
- нет проблем с кодировками;
- подсвечивает синтаксис;
- помимо файлов, может сравнивать директории и синхронизировать их;
- хорошо работает на сравнении больших файлов (гигабайты) и больших директорий;
- генерация отчётов по результатам сравнения. (если это можно назвать плюсом).
- ShareWare;
- нет версии под Linux.
Git и DiffMerge
1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
файл diffmerge следующего содержания:
2) Теперь добавим в файл c:/Users/swipe/.gitconfig
следующие строки:
3) Создадим конфликт и вызовем DiffMerge для его разрешения
Git и WinMerge
1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
файл winmerge следующего содержания:
Когда Git не может автоматически объединить изменения, происходит конфликт слияния и в конфликтующий файл добавляются маркеры слияния (<<<<<<<, =======, и >>>>>>>). Они необходимы для разрешения конфликта с помощью сторонних инструментов.
Рассмотрим файл readme.txt который образуется в результате выполнения слияния веток master и new в приведенном выше примере:
Мы можем открыть файл конфликтов с помощью программы WinMerge для разрешения конфликта.
После этого откроется средство двухстороннего слияния:
Исходя из описанной логики перепишем команду слияния merge_cmd следующим образом:
По сути, оба приведенных варианта эквивалентны.
2) Отредактируем .gitconfig
последняя строчка отменяет сохранение backup-файлов в директории репозитория.
3) Создадим конфликт при слиянии двух веток (см. пример с использованием DiffMerge).
Далее в Directory снимаем указанную галку. Это делается, чтобы KDiff не оставляла файлы с расширением .orig.
В данном конфиге у нас уже уже определены две внешние утилиты сравнения и слияния KDiff3 и P4Merge. В редакторе Far manager это выглядит так:
Ну и теперь проверяем все это в Git. Для этого даем команду
$ git difftool c258082 ffd6b37 --tool=kdiff3 --cc test.txt
И видим запустившееся окно утилиты KDiff3 без того чтобы Git задавал лишние вопросы (это мы настроили в конфиге).
$ git merge newbranch
$ git mergetool --tool=kdiff3
И получаем всплывшее окошко KDiff3 в котором нам сообщили о количестве конфликтов и т.д и т.п. Кстати, появление этого информационного окна можно отключить в настройках KDiff3.
Далее смотрим конфликт.
Разрешаем его, жмем сохранить и выходим из KDiff3
Читайте также: