Сравнить два файла с кодом
Сравнивает два файла или набора файлов и отображает различия между ними.
Сравнение папок
Сравнение работает не только для отдельных файлов, но и для целых каталогов. Процесс такой же, как и для файлов — просто выберите две папки в окне вашего проекта и нажмите Ctrl + D или щелкните правой кнопкой мыши и выберите Compare Directories в контекстном меню.
Здесь вы можете увидеть список всех файлов, присутствующих в обоих или в одном из каталогов. Вы можете легко определить, какие файлы присутствуют только в одной папке, а какие в обеих. Файлы в обоих папках вы можете сравнить, как обычно.
1. Right click the first file and "Select for Compare"
Синтаксис
BeyondCompare
- трехстороннее слияние;
- может сравнивать файлы, директории, удаленные директории, архивы, а также MP3-файлы, изображения и др. Но последние пункты — это в принципе не нужный функционал.
- ShareWare;
- нет версии под Mac.
3. You should see the diff panel appear once you've completed these steps:
Сравнить с использованием VCS
Если вы используете систему контроля версий (VCS), у вас есть еще несколько вариантов сравнения. Например, если вы используете Git, вы можете перейти к VCS → Git или щелкнуть правой кнопкой мыши на вашем редакторе и выбрать Git. Теперь вы можете:
- Сравнить с той же версией репозитория: сравнивает текущий локальный файл с версией в вашем удаленном репозитории
- Сравнить с веткой: сравнивает локальный файл с тем же файлом в другой ветке
- Показать историю: сравнивает локальный файл с его предыдущими версиями
Git и WinMerge
1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
файл winmerge следующего содержания:
Когда Git не может автоматически объединить изменения, происходит конфликт слияния и в конфликтующий файл добавляются маркеры слияния (>>>>>>). Они необходимы для разрешения конфликта с помощью сторонних инструментов.
Рассмотрим файл readme.txt который образуется в результате выполнения слияния веток master и new в приведенном выше примере:
Мы можем открыть файл конфликтов с помощью программы WinMerge для разрешения конфликта.
После этого откроется средство двухстороннего слияния:
Исходя из описанной логики перепишем команду слияния merge_cmd следующим образом:
По сути, оба приведенных варианта эквивалентны.
2) Отредактируем .gitconfig
последняя строчка отменяет сохранение backup-файлов в директории репозитория.
3) Создадим конфликт при слиянии двух веток (см. пример с использованием DiffMerge).
Note: you can also CTRL-select both files, right click on one, and select "Compare Selected" to achieve the same thing:
Diff from Explorer Panel
This is the quickest, easiest way to bring up the diff panels.
TKDiff
- GPLv2;
- можно добавлять закладки для различий;
- с кодировками работает нормально;
- интерфейс менее удобен и выглядит очень бедно (см. скриншот), чем у других продуктов.
- нет подсветки синтаксиса;
- не умеет сравнивать директории.
Git diff in from the Activity Bar
If you would like to compare your local file changes with the latest git version of a file, click the git icon in the activity bar, then select the file that you would like to compare.
Note: you can also edit files from within the diff panels! VS Code is awesome.
I hope this helped you! Diffing in VS Code is very useful for quickly seeing changes between two files. It also helps to remind yourself of the changes you've made from the master version of a file on git once in a while. VSCode diffs are a great thing to add to your developer toolbox.
DiffMerge
- бесплатен;
- поддерживает трехстороннее слияние;
- умеет сравнивать директории.
- бывают проблемы при работе с кириллицей. Думаю, со временем, исправят.
- DiffMerge по умолчанию, не поддерживает подсветку синтаксиса языков программирования.
Сравнение файлов проекта
Допустим, в вашем проекте есть два похожих файла, и вам нужно сравнивать их построчно. С IDEA это очень просто. Просто выберите оба файла в окне вашего проекта (удерживая Ctrl для множественного выбора).
Теперь у вас есть два варианта:
- Щелкните правой кнопкой мыши один из файлов и выберите в меню опцию «Compare Files».
- Нажмите Ctrl + D
После чего открывается новое окно, которое содержит две панели, в каждой из которых отображается содержимое одого файла. Это очень похоже на diff в системах контроля версий, таких как Git.
Каждое отличие имеет цветовую кодировку:
- Отсутствие окраски означает, что содержание одинаково
- Синий означает наличие изменений в той же строке
- Зеленый означает новый контент
- Серый означает удаленный контент
Вы можете нажать иконки со стрелками » и «, чтобы применить конкретное изменение из одного файла в другой.
Cравнение работает и для изображений, хотя вы не можете видеть и использовать индивидуальные различия.
Сравнение с файлом вне проекта
Второй пример, когда вам нужно сравнить файл из вашего проекта с другим файлом вне его.
Процесс очень похож на описанный выше. Выберите один файл в окне вашего проекта и:
- Щелкните правой кнопкой мыши один из файлов и выберите в меню опцию «Compare With. »
- Нажмите Ctrl + D
Последний шаг — поиск внешнего файла для сравнения. Далее сравнение происходит так же, как и в примере выше.
VS Code has a very powerful diff tool. This quick post is going to teach you how to perform diffs (compare files) in VS Code.
There's two primary types of diffs you can do with VS Code.
- Compare two files in your project
- Compare git file versions
Параметры
Параметр | Описание |
---|---|
/a | Сокращает выходные данные сравнения ASCII. Вместо отображения всех строк, которые отличаются, FC отображает только первую и последнюю строку для каждого набора различий. |
/b | Сравнивает два файла в двоичном режиме, байт по байтам и не пытается повторно синхронизировать файлы после обнаружения несоответствия. Этот режим используется по умолчанию для сравнения файлов со следующими расширениями: .exe, com, .sys, obj, lib или bin. |
/C | Игнорирует регистр букв. |
/l | Сравнивает файлы в режиме ASCII, построчно и пытается повторно синхронизировать файлы после обнаружения несоответствия. Этот режим используется по умолчанию для сравнения файлов, за исключением файлов со следующими расширениями файлов: .exe, com, .sys, obj, lib или bin. |
/лб | Задает число строк для внутреннего буфера строки равным N. Длина буфера строки по умолчанию составляет 100 строк. Если сравниваемые файлы содержат более 100 последовательных строк разной, FC отменяет сравнение. |
/n | Отображает номера строк во время сравнения ASCII. |
"/OFF" [строка] | Не пропускает файлы с установленным атрибутом "вне сети". |
/t | Предотвращает преобразование табуляций в пробелы с FC . Поведение по умолчанию заключается в том, что символы табуляции обрабатываются как пробелы, а для каждой восьмой позиции — остановка. |
/U | Сравнивает файлы как текстовые файлы в Юникоде. |
/W | Сжимает пробелы (т. е. знаки табуляции и пробелы) во время сравнения. Если строка содержит несколько последовательных пробелов или знаков табуляции, /w рассматривает эти символы как один пробел. При использовании параметра /wFC игнорирует пробелы в начале и конце строки. |
/ | Указывает число последовательных строк, которые должны совпадать после несоответствия, прежде чем FC считает файлы для повторной синхронизации. Если число совпадающих строк в файлах меньше nnnn, FC отображает соответствующие строки в виде различий. Значение по умолчанию — 2. |
[:][] | Указывает расположение и имя первого файла или набора сравниваемых файлов. требуется имя_файла1 . |
[:][] | Указывает расположение и имя второго файла или набора сравниваемых файлов. требуется имя_файла2 . |
/? | Отображение справки в командной строке. |
Комментарии
Эта команда имплеметед by c:\WINDOWS\fc.exe. Эту команду можно использовать в PowerShell, но не забудьте проделать полный исполняемый файл (fc.exe), так как "FC" также является псевдонимом для формата Custom.
При использовании FC для сравнения в ASCII, FC отображает различия между двумя файлами в следующем порядке:
Имя первого файла
Строки из имя_файла1 , отличные от файлов
Первая строка для сопоставления в обоих файлах
Имя второго файла
Строки из имя_файла2 различаются
Первая строка для сопоставления
/b выводит несоответствия, найденные во время двоичного сравнения в следующем синтаксисе:
Значение XXXXXXXX задает относительный шестнадцатеричный адрес для пары байтов, измеряемой от начала файла. Адреса начинаются с 00000000. Шестнадцатеричные значения для YY и ZZ представляют несовпадающие байты из имя_файла1 и имя_файла2соответственно.
В имя_файла1 и имя_файла2можно использовать подстановочные знаки ( * и ?). Если в имя_файла1используется подстановочный знак, FC сравнивает все указанные файлы с файлом или набором файлов, указанным параметром имя_файла2. Если в параметре имя_файла2используется подстановочный знак, то FC использует соответствующее значение из имя_файла1.
Resynch failed. Files are too different.
При сравнении двоичных файлов, размер которых превышает объем доступной памяти, FC полностью сравнивает оба файла, наполняя участки памяти следующими частями от диска. Результат будет таким же, как и для файлов, которые полностью умещаются в памяти.
Почему использовать инструмент Code Diff?
Сейчас очень распространено явление, когда люди копируют текст из одного сайта и публикуют его как свой собственный контент, что непрофессионально и называется плагиатом (plagiarism). Этот инструмент поможет вам избегать плагиата. Необходимо скопировать два текста, и инструмент покажет, в каких частях есть плагиат. Учитывайте также, что контент с плагиатом приносит меньше трафика. Если ваш контент можно найти на других сайтах, это приносит меньше трафика, так как вы не обеспечиваете хороший контент для посетителей.
От переводчика: В блоге Войтеха Рузички по программированию имеется 13 постов с тегом IDEA. Один из был переведен и опубликован на Хабре — Лучшие плагины IntelliJ IDEA. Он оказася довольно популярен и я решил попробовать перевести и другие посты об IDEA. Надеюсь будут полезны для вас.
IntelliJ IDEA предлагает множество способов сравнения файлов, папок и фрагментов кода и даже синхронизации содержимого папок.
KDiff3
- бесплатен;
- поддерживает трехстороннее слияние;
- умеет сравнивать директории;
- с различными кодировками работает нормально;
- без дополнений не подсвечивает синтаксис.
Собственное сравнение
Как насчет случая, когда вы хотите сравнить два фрагмента кода из внешних источников? Вы тоже можете это сделать! Просто запустите Find Action с помощью Ctrl + Shift + A и затем найдите опцию Open Blank Diff Window в контекстном меню.
Откроется новое окно сравнения с пустыми обеими панелями, так что вы сможете скопировать и вставить оба фрагмента для сравнения.
Araxis Merge
- трехстороннее слияние;
- нет проблем с кодировками;
- подсвечивает синтаксис;
- помимо файлов, может сравнивать директории и синхронизировать их;
- хорошо работает на сравнении больших файлов (гигабайты) и больших директорий;
- генерация отчётов по результатам сравнения. (если это можно назвать плюсом).
- ShareWare;
- нет версии под Linux.
WinMerge
- Open Source;
- никаких проблем с кодировками;
- подсветка синтаксиса без лишних телодвижений;
- сравнение директорий.
- инструмент слияния является двусторонним, что может создавать неудобства в некоторых случаях;
- Windows only.
- GPL v2;
- двустороннее и трехстороннее слияние файлов;
- сравнение директорий;
- подсветка синтаксиса (при установленном GtkSourceView).
- для установки под Windows требуется установить Python, GTK+, Glib, GtkSourceView, что не каждому понравиться.
Синхронизация папок
Инструмент сравнения каталогов полезен не только для выявления различий в обоих каталогах, но и для синхронизации изменений. Вы можете применить изменения для отдельных разделов каждого файла, как обычно. Но вы также можете пометить файлы, присутствующие только в одном из каталогов, для сохранения или синхронизации с другим каталогом. Вы можете изменить желаемое действие для каждого файла в столбце *. Как только вы закончили свой выбор, вы можете нажать либо Synchronize selected, либо Synchronize all для выполения нейобходимой синхронизации.
На хабре уже было много статей о распределенных системах управления версиями (DVCS), их сравнений, а также сравнений GUI-клиентов для них. Также были обсуждения плагинов к IDE для работы с git и mercurial. Но практически не было информации об инструментах визуального сравнения и разрешения конфликтов слияния.
Недавно я «перескочил» с mercurial (который до сих пор считаю более удобным и логичным) на git, потому что, подавляющее большинство проектов, которые мне интересны, используют git и хостятся на github. В связи с этим, встал вопрос о пересмотре арсенала инструментов, в частности вопрос выбора инструмента визуального сравнения и слияния (diff and merge). Дабы восполнить недостаток информации на хабре, я решил написать этот мини-обзор. Как говориться — по горячим следам.
2. Right click on the second file and "Compare with Selected"
Сравнение с буфером обмена
Возможно, у вас есть файл в вашем проекте, и вам нужно сравнить его с некоторым внешним контентом, который не сохраняется как файл на вашем компьютере. Может быть, это фрагмент кода из Интернета, например, с сайта stackoverflow.
Во-первых, вам нужно открыть файл из вашего проекта в вашем редакторе. Затем скопируйте в буфер обмена фрагмент, который вы хотите сравнить (Ctrl + C).
Теперь у вас есть два варианта. Либо сравните весь файл с буфером обмена, либо сравнить выделенный текст.
- Если вы хотите, чтобы весь файл сравнивался, просто щелкните правой кнопкой мыши в любом месте редактора и выберите «Compare with Clipboard» в контекстном меню.
- Если вы хотите сравнить только выделенный текст, сначала выберите какой-то фрагмент файла, а затем щелкните правой кнопкой мыши, как и раньше.
Diff from command line
This is convenient if you want to build up muscle memory of typing out the commands into the terminal. Here's how to do it.
Paste this command into the command line with your file names.
Executing this command should bring up the diff panel, just like it did from the explorer window.
Примеры
Чтобы выполнить сравнение в ASCII двух текстовых файлов: Monthly. rpt и Sales. rpt, и отобразить результаты в сокращенном формате, введите:
Чтобы создать двоичное сравнение двух пакетных файлов, profits.bat и earnings.bat, введите:
Отобразятся результаты, аналогичные приведенным ниже.
Чтобы сравнить каждый файл .bat в текущем каталоге с файлом new.bat, введите:
Чтобы сравнить файловый new.bat на диске C с файлом new.bat на диске D, введите:
Чтобы сравнить каждый пакетный файл в корневом каталоге диска C с файлом с тем же именем в корневом каталоге на диске D, введите:
Используйте бесплатный онлайн инструмент Code Diff для сравнения двух текстовых файлов.
С помощью этого инструмента можно легко выделить различия между двумя текстами. Инструмент очень легко используется. В отдельных блоках введите два текста и получите результат внизу. Инструмент наглядно отобразит различия между двумя текстовыми областями, выделяя измененные части красным цветом. Вы можете сами выбрать метод сравнения текстов (посимвольно, пословно и построчно).
Инструмент используется, чтобы показать различия между двумя версиями одного и того же файла. Современные реализации поддерживают также двоичные файлы. Вывод называется "diff", или патч, так как он может быть применен с программой patch (программная утилита Unix).
Diff-утилита была разработана в начале 1970-х годов для операционной системы Unix. Финальная версия была полностью разработана Дугласом Макилроем. Алгоритм стал известен как алгоритм Ханта-Макилроя.
Модификации с 1975 года включают улучшение основного алгоритма, добавление новых ключей команды и новые форматы вывода. Базовый алгоритм описывается в книгах Юджина В. Майерса "An O(ND) Difference Algorithm and its Variations" и в книге "A File Comparison Program" Вебба Миллера и Майерса. Алгоритм был независимо разработан и описан Е. Укконеном в "Algorithms for Approximate String Matching". Первые версии программы diff были разработаны для сравнения строк текстовых файлов, рассчитывая, что символ новой строки разделит строки. В 1980-х годах поддержка двоичных файлов привела к изменениям в разработке и реализации программы.
Diffuse
- GPL;
- поддержка 2-way, 3-way и n-way (произвольное количество файлов) слияния;
- подсветка синтаксиса;
- отлично работает с UTF-8;
- неограниченная глубина отмен (Undo);
- удобная навигация по коду.
- разве что, невозможность сравнивать директории.
Git и DiffMerge
1) Добавим в директорию c:/Git/libexec/git-core/mergetools/
файл diffmerge следующего содержания:
2) Теперь добавим в файл c:/Users/swipe/.gitconfig
следующие строки:
3) Создадим конфликт и вызовем DiffMerge для его разрешения
Сравнение с предыдущей локальной версией файла
Даже если вы не используете какую-либо систему контроля версий, IDEA хранит исторические версии ваших локальных файлов. Вы можете щелкнуть правой кнопкой мыши в вашем редакторе и выбрать Local history → Show history в контекстном меню.
Здесь вы можете просмотреть более старые версии вашего текущего файла и увидеть разницу между старой и текущей версией и применить любые изменения, если это необходимо.
SmartSynchronize
- трехстороннее слияние;
- нет проблем с кодировками;
- помимо файлов, может сравнивать директории.
- для коммерческого использования требуется лицензия;
- подсветка синтаксиса для языков программирования по умолчанию не предусмотрена. Не исключено, что можно как-то сделать.
Читайте также: