Linux meld что это

Обновлено: 07.07.2024

Оригинал: How to compare directories with Meld on Linux
Автор: Himanshu Arora
Дата публикации: 27 января 2017 г.
Перевод: А.Панин
Дата перевода: 10 марта 2017 г.

Мы уже рассмотрели приложение Meld с точки зрения начинающего пользователя (не обойдя стороной вопрос его установки), а также некоторые приемы использования данного приложения, которые могут быть полезны опытным пользователям. Если вы помните, в статье для начинающих пользователей мы упоминали о том, что Meld может использоваться как для сравнения файлов, так и для сравнения содержимого директорий. Теперь, когда мы рассмотрели вопрос сравнения файлов, пришло время рассмотреть вопрос сравнения содержимого директорий.

Но перед тем, как приступить к рассмотрению обозначенной функции приложения, следует упомянуть о том, что все инструкции и примеры, представленные в данной статье, были протестированы в системе Ubuntu 14.04 с Meld версии 3.14.2.

Сравнение содержимого директорий с помощью Meld

Для сравнения содержимого двух директорий с помощью Meld следует запустить данное приложение и воспользоваться его функцией под названием Сравнение каталогов ( Directory comparsion ).


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


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


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

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

В следующей таблице, скопированной с веб-сайта рассматриваемого проекта, описываются различные состояния элементов при сравнении содержимого директорий в Meld.

Состояние Отображение Значение
Идентичный элемент Обычный шрифт Файл/директория являются идентичными во всех исследуемых директориях.
Идентичный элемент после фильтрации Наклонный шрифт Файлы в исследуемых директориях отличаются. Но после применения фильтров они становятся идентичными.
Модифицированный элемент Полужирный шрифт синего цвета Файлы в исследуемых директориях отличаются.
Новый элемент Полужирный шрифт зеленого цвета Данный файл/директория существует в данной исследуемой директории, но отсутствует в других исследуемых директориях.
Отсутствующий элемент Обычный шрифт серого цвета с перечеркиванием Данный файл/директория не существует в данной директории, но существует в других исследуемых директориях.
Ошибочный элемент Полужирный шрифт ярко-красного цвета с фоном желтого цвета При сравнении данного файла произошла ошибка. Чаще всего ошибки связаны с правами доступа к файлам (то есть, у Meld нет прав для чтения их содержимого), а также с некорректным кодированием их имен.

По умолчанию Meld отображает все элементы исследуемых директорий даже если они являются идентичными (то есть, между ними нет отличий). Однако, вы можете настроить инструмент таким образом, чтобы он не отображал такие файлы/директории путем нажатия на кнопку Одинаковые ( Same ) на панели инструментов - в результате эта кнопка будет деактивирована.


Это результат моего сравнения после деактивации кнопки Одинаковые .


Несложно заметить, что в данном случае отображаются лишь отличия между двумя директориями (новые и модифицированные файлы). Аналогично, при деактивации кнопки Новые ( New ) будут отображаться лишь модифицированные файлы. Поэтому вы можете свободно использовать три этих кнопки для выбора отличий, которые будут отображаться Meld после сравнения двух директорий.

Что касается отличий, вы можете переходить от одного отличия к другому с помощью кнопок со стрелками, направленными вверх и вниз, которые расположены над областью вывода содержимого директорий, а для показа областей редактирования содержимого двух файлов вы можете либо использовать двойной клик по отношению к имени любого файла, либо нажать на кнопку Сравнить ( Compare ), расположенную рядом с упомянутыми выше кнопками.


Примечание 1: если вы внимательно посмотрите на последнюю иллюстрацию, вы обнаружите цветные блоки слева и справа от представлений древовидных структур в окне Meld. Эти блоки по своей сути являются "простым представлением результатов сравнения". Для любых отличающихся файла или директории рядом с древовидным представлением создается небольшой цветной блок. Вы можете нажимать на каждый из таких блоков для непосредственного перехода к соответствующему элементу древовидного представления.

Примечание 2: хотя у вас всегда имеется возможность открытия файлов и их объединения в соответствии с вашими представлениями, при необходимости добавления всех отличных строк в соответствующий файл/директорию (то есть, приведения файлов/директорий к полностью идентичному содержанию), вы можете использовать кнопки Copy to Left и Copy to Right .


Например, вы можете выбрать файл или директорию на левой панели и нажать на кнопку Copy to Right для приведения соответствующего элемента на правой панели к идентичному содержанию.

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

Среди элементов упомянутого раскрывающегося списка имеются файлы резервных копий (Backups), файлы специфичных для операционной системы метаданных (OS-specific metadata), файлы систем контроля версий (Version Control), бинарные файлы (Binaries) и мультимедийные файлы (Media).


Эквивалент рассматриваемого списка также доступен после осуществления перехода в рамках меню окна приложения Вид - Типы файлов . Вы можете добавить новые элементы в данное меню (а также удалить существующие), осуществив переход в рамках главного меню приложения Настройки - Фильтры файлов .


Для создания нового фильтра вам придется использовать шаблоны командной оболочки. Ниже приведен список шаблонов командной оболочки, поддерживаемых Meld.

Шаблон Совпадает с
* Любыми символами (то есть нулем или большим количеством произвольных символов)
? Ровно одним произвольным символом
[abc] Любым из символов из квадратных скобок
[!abc] Любым символом, кроме приведенных в квадратных скобках
Последовательностями символов "cat" и "dog"

Наконец, важно знать, что регистр символов имен файлов играет важную роль, ведь Meld по умолчанию осуществляет их сравнение с учетом регистра символов. Это означает, что, к примеру, файлы с именами README и ReadMe будут рассматриваться приложением как не связанные друг с другом.

К счастью, Meld позволяет пользователю деактивировать данную функцию. Все, что для этого нужно - это открыть подменю Вид меню окна приложения и установить флажок Игнорировать регистр имени файла ( Ignore Filename Case ).


Заключение

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

Да, с помощью Meld вы также можете сравнивать по три директории одновременно, причем для этого нужно всего лишь установить флажок и выбрать с помощью соответствующего элемента управления третью директорию перед началом сравнения. Мы не обсуждали эту возможность в рамках данной статьи, но наверняка будем обсуждать ее в одной из следующих статей серии.

Meld file1.jpg

Meld — очень полезная программа для наглядного сравнения файлов и катологов; кроссплатформенная программа (OS X, Linux, Windows) для синхронизации файлов и директорий. С ее помощью осуществляется как двух-, так и трехстороннее сравнение. . Это что-то вроде утилиты diff, но в графическом виде с возможностью «сливать» изменения, удалять и восстанавливать файлы. Можно сравнивать как два, так и три файла или каталога одновременно. [Источник 1]

Содержание

Оценка программы MELD

Image5sdfghjk.jpg

Несмотря на поддержку нескольких платформ, приложение далеко не стабильно функционирует в Windows. Скажем, вкладки и окна не всегда открываются и закрываются корректно. Возможно, проблемы связаны с библиотекой PyGTK, входящей в инсталлятор. Запустить программу получилось не сразу и только от имени администратора. Ошибки возникают постоянно, в подтверждение — перечень текущих проблем.В процессе сравнения файлов можно задействовать текстовый фильтр или поиск (поддерживается синтаксис regex). Предусмотрены подсветка синтаксиса (используется библиотека gtksourceview), нумерация строк, учет пробелов и другие опции, которые нужно активировать через настройки, так как по умолчанию они отключены. Вставки, изменения и конфликты в документе подсвечиваются, возможна быстрая навигация по списку изменений и экспорт в формате diff. Связь между файлами легко отследить с помощью соединительных линий и одним кликом произвести слияние нужных участков.

Сканирование файлов директорий работает очень медленно. Это связано с тем, что сравнение осуществляется по содержимому, а не по размеру и временной отметке. Проблема решается установкой флажка напротив соответствующей опции в настройках. Набор доступных колонок весьма ограничен: размер, дата модификации и разрешения. Хотя и можно воспользоваться файловым фильтром, просмотр длинного списка файлов все равно превращается в рутинный процесс: нельзя мгновенно остановить сканирование, свернуть дерево файлов, быстро переместиться к нужным элементам. Разработчикам будет интересен третий режим работы приложения — Version Control View. Meld поддерживает интерфейс командной строки, поэтому предусмотрена интеграция со средами Git, Bazaar, Mercurial, Subversion и многим другими.Meld представлен для большинства Linux дистрибутивов (Ubuntu, Suse, Fedora и др.), и присутствует в их основных репозиториях.

Плюсы и минусы программы Meld


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

Резюме

Программа Meld зарекомендовала себя с хорошей стороны в среде Linux, чего нельзя сказать о функционировании в Windows. Нестабильная работа и неудобный интерфейс, отсутствие сессий, недостаточная гибкость настройки. С другой стороны, инструментарий программы неплох, а качественная адаптация Meld для Windows, возможно, лишь вопрос времени. [Источник 2]

Обзор Meld

Функции программы Meld

  1. Сравнение двух-трёх файлов или каталогов.
  2. Создание файлов правки (англ. patch file) с описанием различий между файлами — Patchwork (Алгоритм).
  3. Работа с системами управления версиями Git, Subversion, Mercurial, Bazaar и CVS (Concurrent Versions System).
  4. Вкладочный интерфейс [6] . [Источник 3]

Принцип работы программы Meld

Итак начнём с diff-а. Первое что стоит сделать это посмотреть документацию у meld: "meld –help", из которой узнаём, что достаточно передать ему, в качестве параметров, 2 пути к сравниваемым файлам или директориям. Теперь разберёмся с git, опять пойдём в документацию и вытащим из неё вот такие пару строк для git config:

Ну или для Windows вот так:

Плюс для Windows нужно будет добавить директорию "meld.exe" в PATH. В секции "difftool", как можно догадаться, определяется команда, для вызова внешнего инструмента. А в "diff" - название используемой секции по умолчанию. Тут единственная магия это 2 служебных переменных, которые предоставляет git:

  • $LOCAL - это путь к временному файлу, в котором храниться текущее (локальное) состояние файла.
  • $REMOTE - это тоже путь к временному файлу, в котором храниться содержимое файла с которым мы будем сравнивать, в зависимости от параметров сравнения там может лежать например последняя закомиченная версия файла из ветки master.

Всё, теперь можно посмотреть например разницу между локальными изменениями и версиями файлов в HEAD, запустив:

Чуть улучшить результат можно вот так:

Теперь meld будет открывать не каждый файл по очереди, а покажет сразу все изменения, которые мы запросили в виде сравнения двух директорий. Что бы не писать такую большую команду каждый раз, git даёт нам возможность настроить алиасы:

Теперь разницу между мастером и branch1, можно посмотреть вот так:

Для мержа всё не сильно сложнее, опять смотрим справку по meld, там пишут что нужно в качестве параметров указать 3 файла и в параметре "–output" указать какой из них использовать для сохранения результата. Для git тоже обратимся к документации и получим вот это:

з незнакомых опций тут следующие:

  • prompt = false - не делать запросов перед мёржем каждого файла.
  • keepBackup = true - создавать бекапы исходных файлов, перед объединением, хотя многим может не понравиться, т.к. их придётся потом удалять, но как отключить такое поведение я думаю понятно.
  • $MERGED - служебная переменная, в которой храниться файл, в который, как ожидает git мы запишем результат мёржа.

Ну и запуск, с учётом алиасов, выглядит вот так:

Git в ответ будет последовательно открывать meld для каждого конфликта в режиме 3-х стороннего мёржа. [Источник 4] Всё вместе это выглядит вот так:

Как сравнить файлы и папки

Установка Meld в Windows

  • С версиями python'а жонглировать не стал, установил ту, что указана в мануале. .
  • Устанавливаем (напр. c:\dev\python).

2) GTK+ All-in-one bundle:

  • пак я взяли поновее (2.18 вместо 2.16). .
  • Распаковываем (напр. c:\dev\gtk).

3) Python gnome bindings:

    . . .
  • еще pygtksourceview, пригодилось при допиливании. .
  • Все это нужно установить убедившись, что инсталятор правильно нашел папку с python'ом (напр. c:\dev\python).
  • Пара именно этих версий (pygtksourceview-2.2.0 и gtksourceview-2.2.2) у меня заработала. .
  • А еще понадобится версия 2.9.3, т.к. в 2.2.2 не хватает некоторых файлов. .
  • Распаковываем 2.2.2 (напр. c:\dev\gtksourceview).
    .
  • Устанавливаем по ситуации (напр. c:\dev\cygwin).
  • Если же не работает, ни без Cygwin'а, ни с ним, нужно доустановить пакет patch.

7) Download meld source code:

8) Add this to your Path:

  • в переменную PATH нужно добавить пути к python'у (пункт 1, c:\dev\python), к библиотекам (пункты 2, 4 и 5, c:\dev\gtk\bin, c:\dev\glade\bin и c:\dev\gtksourceview\bin) и к Cygwin'у, если установлен (пункт 6, c:\dev\cygwin\bin). Еще можно добавить путь к самому Meld'у (пункт 7, c:\dev\meld\meld-1.3.1)

Теперь, если запустить python, указав путь к Meld'у (c:\dev\meld\meld-1.3.1\meld) в качестве параметра, должно открыться окно Meld'а. [Источник 5]

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

diff and merge


Недавно я «перескочил» с 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 для его разрешения


tree


diff


conflict


merge

Git и WinMerge

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


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


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

open

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

winmerge

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

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

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

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

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

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

diff and merge


Недавно я «перескочил» с 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 для его разрешения


tree


diff


conflict


merge

Git и WinMerge

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


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


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

open

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

winmerge

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

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

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

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

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

Читайте также: