На хабре уже было много статей о распределенных системах управления версиями (DVCS), их сравнений, а также сравнений GUI-клиентов для них. Также были обсуждения плагинов к IDE для работы с git и mercurial. Но практически не было информации
об инструментах визуального сравнения и разрешения конфликтов слияния.
Недавно я «перескочил» с mercurial (который до сих пор считаю более удобным и логичным) на git, потому что, подавляющее большинство проектов, которые мне интересны, используют git и хостятся на github. В связи с этим, встал вопрос о пересмотре арсенала инструментов, в частности вопрос
выбора инструмента
визуального сравнения и слияния (diff and merge). Дабы восполнить недостаток информации на хабре, я решил написать этот мини-обзор. Как говориться — по горячим следам.
Под катом Вы также найдете примеры настроек Git для использования с DiffMerge и WinMerge под Windows. Думаю многим сэкономит время.
Название | Особенности | Платформа |
KDiff3
https://kdiff3.sourceforge.net/
[
]
Плюсы
:
- бесплатен;
- поддерживает трехстороннее слияние;
- умеет сравнивать директории;
- с различными кодировками работает нормально;
Минусы
:
- без дополнений не подсвечивает синтаксис.
Примечание: устанавливается вместе с TortoiseHg.
DiffMerge
https://sourcegear.com/diffmerge/index.html
[
]
:
- бесплатен;
- поддерживает трехстороннее слияние;
- умеет сравнивать директории.
Минусы
:
- бывают проблемы при работе с кириллицей. Думаю, со временем, исправят.
- DiffMerge по умолчанию, не поддерживает подсветку синтаксиса языков программирования.
WinMerge
https://winmerge.org https://ru.wikipedia.org/wiki/Winmerge
[
]
:
- Open Source;
- никаких проблем с кодировками;
- подсветка синтаксиса без лишних телодвижений;
- сравнение директорий.
Минусы
:
- инструмент слияния является двусторонним, что может создавать неудобства в некоторых случаях;
- Windows only.
Примечание
: этим инструментом я начал пользоваться очень давно (еще до того, как стал использовать mercurial и git) и тот факт, что инструмент слияния является двусторонним в большинстве случаев не доставляет особых неудобств.
Meld
https://meld.sourceforge.net/
[
]
:
- GPL v2;
- двустороннее и трехстороннее слияние файлов;
- сравнение директорий;
- подсветка синтаксиса (при установленном GtkSourceView).
Минусы
:
- для установки под Windows требуется установить Python, GTK+, Glib, GtkSourceView, что не каждому понравиться.
Сравниваем файлы в Total Commander
Для выполнения операций сравнения нескольких файлов по средствам данной программы нужно в одной из панелей выбрать первый файл для сравнения, а во второй панели — выбрать второй.
Потом открыть пункт меню «файл» и перейти в пункт «сравнить по содержимому».
Должно отобразиться окно разбитое на две колонки. В верхней части колонок расположена срока с функцией выбора файла. Выбрав файл для сравнения нужно будет нажать кнопку «сравнить».
В двух колонках будет отображено содержимое сравниваемых файлов. Отличия найденные в файлах будут подсвечиваться. Для осуществления редактирования содержимого файла необходимо нажать кнопку «редактировать».
Diffuse
https://diffuse.sourceforge.net/
[
]
:
- GPL;
- поддержка 2-way, 3-way и n-way (произвольное количество файлов) слияния;
- подсветка синтаксиса;
- отлично работает с UTF-8;
- неограниченная глубина отмен (Undo);
- удобная навигация по коду.
Минусы
:
- разве что, невозможность сравнивать директории.
Примечаие
: при слиянии с помощью команды git mergetool через Git Bash под Windows открывается четвертое — «лишнее» окно. Убрать можно, подправив конфиг c:/Git/libexec/git-core/mergetools/diffuse
: при установке под Windows уже включает в себя все зависимости (в отличие от Meld), а именно Python и пакет PyGTK.
Установка программы
После скачивания установщика программы, запустите его (файл «HashTab Setup.exe»), кликнув по нему мышкой. Откроется окно установщика программы (рис. 1):
Рис. 1. Установка программы.
Нажмите кнопку «Next»>. Откроется следующее окно Лицензионного Соглашения (рис. 2):
Рис. 2. Лицензионное соглашение.
Нажмите кнопку «I Agree», затем кнопку «Install», чтобы начать установку.
После завершения установки нажмите кнопку «Finish».
TKDiff
https://sourceforge.net/projects/tkdiff/
[
]
:
- GPLv2;
- можно добавлять закладки для различий;
- с кодировками работает нормально;
Минусы
:
- интерфейс менее удобен и выглядит очень бедно (см. скриншот), чем у других продуктов.
- нет подсветки синтаксиса;
- не умеет сравнивать директории.
SmartSynchronize
https://syntevo.com/smartsynchronize/index.html
[
]
:
- трехстороннее слияние;
- нет проблем с кодировками;
- помимо файлов, может сравнивать директории.
Минусы
:
- для коммерческого использования требуется лицензия;
- подсветка синтаксиса для языков программирования по умолчанию не предусмотрена. Не исключено, что можно как-то сделать.
Примечание
: SmartySynctonize встроен в программу SmartGit — удобный GUI-инструмент для работы с Git (тоже бесплатен для некоммерческого использования).
BeyondCompare
https://scootersoftware.com/ https://en.wikipedia.org/wiki/Beyond_Compare
[
]
:
- трехстороннее слияние;
- может сравнивать файлы, директории, удаленные директории, архивы, а также MP3-файлы, изображения и др. Но последние пункты — это в принципе не нужный функционал.
Минусы
:
- ShareWare;
- нет версии под Mac.
Сравнивайте PDF файлы онлайн
Если вы не хотите устанавливать какое-либо ПО или вам нужен онлайн инструмент для быстрого сравнения PDF файлов, тогда подходящая онлайн утилита в PDF24 это то, что вам нужно. PDF24 предлагает вам различные бесплатные онлайн PDF утилиты, с которыми вы можете легко решать различные PDF проблемы, и с одной из этих утилит, вы можете сравнивать PDF файлы. Вот как это работает:
- Просто откройте приложение по ссылке ниже.
- Перетащите ваши PDF файлы в соответствующую область.
- Файлы загружены и отображены.
- Начните сравнение двух файлов.
- После анализа, результаты и отличия будут отображены.
Существует множество программ для сравнения текстовых файлов типа TXT, DOC и т.п. Такие программы могут легко сравнить два файла и отобразить в отчете все различия: что было удалено, что было добавлено, а что не было отредактировано и осталось без изменения.
Программами для сравнения файлов часто пользуются программисты, составители различных инструкций, ТЗ и др. документации, которым приходится периодически сравнивать между собой различные версии одного документа или файла.
Но иногда может возникнуть необходимость сравнить PDF-файлы и определить различия, имеющиеся между ними. Вот тут у многих могут возникнуть трудности. Формат файлов Adobe Acrobat — PDF — весьма специфичен и обычные программы сравнения текста с ним уже не могут справиться.
Самый реальный, но не очень простой вариант сравнения PDF-файлов долгое время был следующим: PDF-документы распознавались с помощью программы типа Fine Reader, преобразовывались в текстовые файлы, например MS Word (doc), и уже эти текстовые файлы сравнивались обычной программой сравнения типа CompareIt! или Ultra Compare. Понятно каждому, что такой метод весьма не удобен и трудоемок, к тому же необходимо иметь две платные программы (для распознавания и для сравнения).
Мы ждали этого долго, и вот, наконец-то фирма Adobe сжалилась над своими клиентами и реализовала механизм сравнения PDF-файлов в свою программу Adobe Acrobat Professional. На счет 7-ой и 8-ой версий нет информации, но как минимум Acrobat PRO 9 и тем более Acrobat PRO 10 и Acrobat PRO 11 имеют встроенную функцию сравнения файлов. Если честно, этого инструмента очень не хватало несколько лет назад, когда было очень нужно выполнять сравнение объемных PDF-файлов, периодически изменяемых их поставщиком.
Araxis Merge
https://araxis.com/merge/
[
]
:
- трехстороннее слияние;
- нет проблем с кодировками;
- подсвечивает синтаксис;
- помимо файлов, может сравнивать директории и синхронизировать их;
- хорошо работает на сравнении больших файлов (гигабайты) и больших директорий;
- генерация отчётов по результатам сравнения.
- Ribbon-интерфейс (если это можно назвать плюсом).
Минусы
:
- ShareWare;
- нет версии под Linux.
Примечание
: в комментариях многие расхваливают и советуют этот инструмент, несмотря на высокую стоимость.
В принципе, все перечисленные инструменты хорошо справляются со своими задачами и данный обзор не тема для спора
, т.к. каждый выбирает инструмент по вкусу. Далее приводятся примеры настроек Git для работы с DiffMerge и WinMerge. По аналогии можно настроить взаимодействие Git с другими инструментами.
Сравнение PDF файлов и отображение отличий
- Защищенная с помощью SSL передача файлов
- Автоматическое удаление файла с сервера через один час
- Сервера расположены в Германии
- Защищенная с помощью SSL передача файлов
- Автоматическое удаление файла с сервера через один час
- Сервера расположены в Германии
Выберите два файла, которые хотите сравнить и приступите к сравнению. Через несколько секунд вы увидите разницу между этими файлами.
Ваши файлы необязательно должны быть PDF. Эта утилита поддерживает все файлы, которые наша система может конвертировать в PDF. Преобразование в PDF происходит автоматически.
Мы сделали максимально простым для вас сравнение документов. Вам не нужно устанавливать или настраивать что-либо, просто выберите свои файлы.
Нет никаких специальных требований к вашей системе для сравнения двух файлов. Это приложение работает во всех основных операционных системах и браузерах.
Вам не нужно устанавливать никаких приложений. Файлы сравниваются на наших серверах. К вашей системе нет никаких специальных требований.
Наша утилита сравнения файлов не хранит ваши файлы дольше, чем это необходимо. Ваши файлы и результаты будут удалены с нашего сервера через некоторое время.
Очень хорошее и простое приложение, которое позволяет мне быстро и легко видеть отличия между двумя похожими файлами.
Нет ничего проще для сравнения двух файлов. Сравнение двух версий документа становится пустяком благодаря этому инструменту.
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 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 подсмотрел тут: https://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/
Командная строка Windows
Если вам нужно просто сравнить файлы без редактирования, то можно воспользоваться стандартной командной строкой Windows 8.
Для этого просто перейдите в меню «Пуск», введите в строке поиска cmd и запустите найденное приложение cmd.exe. Затем введите команду fc /N X Z, где X — путь к первому документу (например, C:\Документы\text1.txt), а Z — путь к второму (например, C:\Документы\text2.txt). В итоге должна получиться подобная строка: fc /N C:\Документы\text1.txt C:\Документы\text2.txt.
После введения строки нажмите Enter, чтобы запустить проверку файлов.
Если различий в файлах мало, то этот способ поможет их выявить, но при большом количестве различий между документами лучше скачать другую программу.