Показване на промените сравнява два файла linux. Файл - gui за сравнение на файлове в Linux. Скриване на идентични редове

Операционната система Linux има няколко софтуерни решения за сравняване на вътрешното съдържание на два файла по различни начини. Разбира се, подобна функция ще бъде безумно полезна за уеб разработчик да сравни два текстови файла. Например, има 2 css файла, които трябва бързо да сравните, за да видите дали се различават. Или вижте какво е новото в актуализирания PHP скрипт.

Един добър пример от живота:

Така че в моя случай трябва да сравня 2 файла bootstrap.css. Това лято поправих нещо в стиловете на файла bootstrap.css (което беше невъзможно да се направи, защото трябва да използвате отделен style.css за редактиране на персонализиран стил). Поради това малко нещо ми е проблематично да надстроя от версия 3.3.2 до bootstrap 3.3.5, т.к. по-новата версия има собствен актуализиран CSS файл, при замяната му всичките ми редакции ще бъдат загубени и част от дизайна на уебсайта ще „излети“. С над 6000 реда код в таблицата със стилове за стартиране е абсолютно невъзможно да видите промените сами.

Сравнете файлове с помощта на diff в Linux:

За да сравните файловете `bootstrap.css" и `bootstrap-original.css" (за по-голяма яснота преименувах оригиналния файл, като добавих префикса -original към него), въведете в терминала: $ diff bootstrap.css bootstrap-original. css В конзолата получихме стандартния отчет за разликите в тези файлове. Ако трябва автоматично да запишете отчета в отделен файл на диск, ние насочваме изхода на резултатите от diff към файла $ diff bootstrap.css bootstrap-original.css > css-modifications.diff Сега целият отчет за разликата във файла ще бъде запазен в същата папка под името " css-modifications.diff". Този изход обаче не показва много ясно къде и какво е добавено или премахнато от мен. За да видите по-ясно как се различават двата файла, можете да използвате sdiff; Разликата с този пакет е, че той не генерира отчет за разлика. Поставяйки двата файла в две колони, той веднага показва разликите в двата файла. `|" подчертава редове, които са различни `" подчертава редове, които се срещат само във втория файл.

Синтаксисът на командата е подобен на синтаксиса diff:

$ sdiff bootstrap.css bootstrap-original.css Покажете разликите в конзолата и използвайте командата: $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff Напишете целия отчет в отделен файл. Бих посъветвал също да добавите аргумента -t, за по-четлив формат на отчета за разлика (постига се чрез изравняване на разстоянията между таблиците с интервали). В противен случай в gedit стандартният отчет ще се отвори добре, но в Sublime ще се „замъгли“: $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff -t P.S. Възможностите за сравняване на файлове в Linux не свършват дотук и можете дори да сравнявате 3 файла едновременно. За да направите това, използвайте командатаЗа да сравните три файла наведнъж, използвайте diff3. $ diff3 bootstrap.css bootstrap-original.css bootstrap-3.css > new.diff

Обикновено diff генерира изход в следния формат:

$ diff file1 file2 2c2< Helllo --- >Здравейте

Но има специална опция за команден ред (-y), която казва на помощната програма да изведе данни в две отделни колони. И това е пример за такъв изход:

$ diff -y file1 file2 Здравейте Здравейте Здравейте | здравей чао довиждане

Очевидно, когато използвате този изходен формат, символът "|" използва се за маркиране на различни низове.

5. Скриване на идентични редове

Ако внимателно разгледате изхода от предишния пример (от раздел 4 по-горе), ще откриете, че когато използвате опцията -y на командния ред, diff извежда не само променени редове, но и идентични редове на файловете, които се обработват. В случай, че трябва да премахнете идентични редове от изхода, можете да използвате опцията --suppress-common-lines.

$ diff -y --suppress-common-lines file1 file2 Здравейте | Здравейте

6. Показване на имената на функциите на езика C, съдържащи модифициран код

Когато използвате помощната програма diff за сравняване на два изходни файла на C, може да се използва специална опция (-p), за да каже на помощната програма да показва имената на функциите, чийто код е променен. Например, да предположим, че искате да сравните следните два изходни файла на C:

Файл с име file1.c:

#включи void compare(float x, float y) ( if(x == y) // неправилен метод за сравнение ( printf("\n EQUAL \n"); ) ) int main(void) ( compare(1.234, 1.56789); return 0;)

Файл с име file2:

#включи void compare(float x, float y) ( if(x == y) ( printf("\n EQUAL \n"); ) ) int main(void) ( compare(1.234, 1.56789); return 0; )

Това е резултат от нормално сравнение на тези файлове:

$ diff file1.c file2.c 5c5< if(x == y) // некорректный способ сравнения --- >ако (x == y)

И това е резултатът от сравняването на едни и същи файлове с помощта на опцията -p:

$ diff -p file1.c file2.c *** file1.c 2016-12-29 11:45:36.587010816 +0530 --- file2.c 2016-12-29 11:46:39.823013274 +0530 **** *********** *** 2,8 **** void compare(float x, float y) ( ! if(x == y) // неправилен метод на сравнение ( printf("\n EQUAL \n"); ) --- 2,8 ---- void compare(float x, float y) ( ! if(x == y) ( printf("\n EQUAL \n"); )

Очевидно, когато се използва опцията за команден ред -p, diff генерира по-подробен изход, маркирайки променените редове с удивителен знак ("!").

7. Рекурсивно сравнение на съдържанието на поддиректории

Помощната програма diff също ви позволява да сравнявате рекурсивно съдържанието на поддиректории, но този режим на работа не е активиран по подразбиране. Имах предвид, че когато използвах тази команда:

$ diff diff-files/ second-diff-files/ diff diff-files/file1 second-diff-files/file1 1c1< Hi --- >i diff diff-files/file2 second-diff-files/file2 2c2< Hello --- >здравей

помощната програма diff ще сравнява файлове само от директории от най-високо ниво, но ако използвате опцията -r (която активира режима на рекурсивно сравнение на файлове), дори тези файлове, които са в поддиректории, ще бъдат сравнени:

$ diff -r diff-files/ second-diff-files/ diff -r diff-files/file1 second-diff-files/file1 1c1< Hi --- >i diff -r diff-files/file2 second-diff-files/file2 2c2< Hello --- >ello diff -r diff-files/more-diff-files/file1 second-diff-files/more-diff-files/file1 1c1< Hi --- >i diff -r diff-files/more-diff-files/file2 second-diff-files/more-diff-files/file2 2c2< Hello --- >здравей

8. Третиране на липсващите файлове като празни

Помощната програма diff също предоставя опция, с която можете да й кажете да третира липсващите файлове като празни. Ако сравните файлове с име file1 и file3 (и последният файл не съществува), diff по подразбиране ще изведе съобщение за грешка:

$ diff file1 file3 diff: file3: Няма такъв файл или директория

Няма нищо лошо; всъщност това поведение е съвсем разумно. Но има моменти, когато искате да избегнете съобщения за грешки (може би когато използвате diff като част от скрипт на обвивка), в които можете да използвате опцията -N, за да третирате липсващите файлове като празни и да продължите да сравнявате файлове.

$ diff -N файл1 файл3 1.5d0< Hi < < Helllo < < Bye

Заключение

Ако внимателно прочетете и двете статии от поредицата и независимо повторите всички примерни команди, разгледани в тях, тогава е напълно възможно да се каже, че сте усвоили всички основни умения за работа с въпросната помощна програма. Разбира се, не бихме могли да обсъдим всички въпроси, свързани с diff в рамките на няколко статии, но въпреки това всички основни характеристики и функции на тази помощна програма бяха споменати по един или друг начин в тях.

Ако искате да научите малко повече за тази помощна програма, винаги можете да се обърнете към нейната страница с ръководство. Не мисля, че си струва да се споменава, че трябва периодично да използвате помощната програма с различни набори от параметри, за да симулирате различни работни ситуации.

Уеб администраторите или собствениците на сайтове често трябва да сравняват два файла по съдържание. Тази статия ще ви покаже как да сравните два файла. Всички познати ми методи за сравняване на текстови файлове и скриптове (html, css, php и т.н.) са описани тук.

Метод 1 Мелд

сливат се- графичен инструмент за получаване на разлики и сливане на два файла, две директории. Meld е визуален инструмент за сравнение и сливане на файлове и директории за Linux. Meld е фокусиран основно върху разработчиците. Въпреки това, той може да бъде полезен за всеки потребител, който се нуждае от добър инструмент за сравняване на файлове и директории.

В Meld можете да сравните два или три файла или две или три директории. Можете да видите вашето работно копие от популярни системи за контрол на версиите като CVS, Subversion, Bazaar-NG и Mercurial. Meld е достъпен за повечето дистрибуции на Linux (Ubuntu, Suse, Fedora и др.) и присъства в техните основни хранилища.

# смес за инсталиране на aptitude

Метод 2: Сравняване на съдържанието на два файла в WinMerge.

Безплатната програма WinMerge ви позволява да сравнявате не само съдържанието на файлове, но и съдържанието на цели папки. WinMerge е инструмент с отворен код за разлика и сливане за Windows. WinMerge може да сравнява както файлове, така и папки, показвайки разликите във визуалната текстова форма, която е лесна за разбиране и обработка.

След инсталирането отворете елемента от менюто "Файл" - "Отваряне". Изберете файлове за сравнение. За да направите това, кликнете върху бутона "Преглед" и изберете файла. След като изберете файловете, кликнете върху бутона "OK".

Можете също да редактирате файлове в WinMerge. След като затворите прозореца за сравнение, програмата ще ви подкани да запишете промените във файловете.

Метод 3. разл

разл- помощна програма за сравнение на файлове, която показва разликата между два файла.

    За да сравните директории, използвайте тази команда: $ diff -qr< current-directory> < backup-directory>

Метод 4 Сравнете

Compare - показва разликите между файловете. Може да сравнява съдържанието на файлове или директории, както и да създава, показва и прилага пач файлове. Kompare е графична помощна програма за разлика, която ви позволява да намирате разлики във файловете, както и да ги обедините. Написано на Qt и предназначено основно за KDE. Ето основните му характеристики:

    Поддръжка за множество различни формати;

    Поддръжка за сравняване на linux файл и директории;

    Поддръжка за преглед на diff файлове;

    Персонализиран интерфейс;

    Създаване и прилагане на корекции към файлове.

Метод 5. Сравнете файловете в Total Commander

    Поддържани операционни системи: Windows

Total Commander има инструмент за сравнение на файлове по съдържание, където можете не само да сравнявате съдържание, но и да го редактирате и копирате от един файл в друг.

След стартиране на Total Commander - в един от панелите изберете (клавиш Insert) първия файл за сравнение - във втория панел отворете папката с втория файл и поставете курсора върху него. Наричаме програмата за сравнение: "Файлове → Сравнение по съдържание".

За да направите промени във файла, просто кликнете върху бутона „Редактиране“. Програмата има функции за копиране и връщане назад, търсене и промяна на кодирането. Ако сте направили промени във файла, след като затворите прозореца за сравнение, ще бъдете подканени да запазите промените.

Метод 6: Сравняване на файлове в Notepad++

    Поддържани операционни системи: Windows, може да работи на Linux

Notepad++ не може да сравнява файлове. За появата на тази функционалност в Notepad ++, трябва да инсталирате приставката „Сравнение“.

Стартирайте редактора - отидете на елемента от менюто "Plugins" - "Plugin Manager" - "Show Plugin Manager". В новия прозорец изберете плъгина „Сравни“ и щракнете върху бутона „Инсталиране“.

След като инсталирате приставката, отворете двата файла и изберете менюто "Plugins" - "Compare" - "Compare (Alt + D)". Резултатът от сравнението на файловете ще бъде представен в отделни панели. Линиите, където са открити разлики, ще имат предупредителен знак до тях.

Метод 7: Сравнете файлове с помощта на командния ред на Windows

Сравнението с помощта на командния ред на Windows (cmd.exe) не ви позволява да редактирате файлове, но можете просто да сравните съдържанието на файловете, като използвате този метод.

За да извикате командния ред на Windows, отидете на "Старт" - "Всички програми" - "Аксесоари" - "Команден ред" или натиснете клавишите "Windows + R", въведете cmd и натиснете клавиша Enter.

В командния ред въведете командата:

fc / N път към първия файл път към втория файл

), техните сравнения, както и сравнения на GUI клиенти за тях. Имаше и дискусии за IDE плъгини за работа с git и mercurial. Но на практика нямаше информацияза инструменти за визуално сравнение и разрешаване на конфликти при сливане.

Наскоро „прескочих“ от mercurial (който все още намирам за по-удобен и логичен) към git, тъй като по-голямата част от проектите, които ме интересуват, използват git и се хостват на github. В тази връзка възникна въпросът за преразглеждане на арсенала от инструменти, по-специално въпросът избор на инструментвизуално сравнение и сливане (diff и merge). За да компенсирам липсата на информация за Хабре, реших да напиша това мини ревю. Както се казва - по горещи преследвания.

Под изрязването ще намерите и примери за настройки на Git за използване с DiffMerge и WinMerge в Windows. Мисля, че ще спести много време.

име Особености Платформа

KDiff3

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която се образува в резултат на сливане на клонове майстор и новв примера по-горе:

<<<<<<< HEAD master str ======= new str >>>>>>> нов
Можем да отворим конфликтния файл с WinMerge, за да разрешим конфликта.

Това ще отвори инструмента за двупосочно сливане:

Въз основа на описаната логика ще пренапишем командата за сливане merge_cmdпо следния начин:
merge_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$?)
По същество и двете опции са еквивалентни.

2) Редактиране .gitconfig
tool=winmerge cmd="winmerge" tool=winmerge cmd="winmerge" trustExitCode=false keepBackup=false
Последният ред отменя записването на архивните файлове в директорията на хранилището.

3) Нека създадем конфликт при сливане на два клона (вижте пример с DiffMerge).
git difftool master new // сравняване на два клона

За да разрешите конфликта при сливане на клонове, използвайте командата
git инструмент за сливане

За да сравни два или повече файла, Linux има командата diff. Може да сравнява както отделни файлове, така и директории. Нека разгледаме синтаксиса, опциите за командата diff и някои примери за употреба.

diff команден синтаксис

Командата diff има следния синтаксис:

Diff [опции] файлове-или-директории

Посочваме опции и захранваме в два или повече файла или директории, които трябва да сравним.

опции на командата diff

Помислете за основните опции на командата diff. Ще разгледам само онези опции, които аз самият използвам най-често.

игнорирайте промените, свързани с добавянето на табулатор в текста.
игнорирайте промените, свързани с добавянето на интервали.
-wигнорирайте промените, свързани с добавянето на интервали и табулатори.
игнорирайте новите празни редове.
-p (или --show-c-function)показва името на езиковата функция C, в която са открити промените.
-y (или --едно до рамо)показване на резултатите в две колони.
-rпреглеждайте директории рекурсивно.
-X ФАЙЛИзключете от търсенето файлове, чиито имена съвпадат с шаблоните във файла FILE.
-d (или --минимално)опитайте се да намерите възможно най-малко промени (тоест, елиминирайте фалшивите положителни резултати).

Примери за използване на командата diff

Сравняване на два текстови файла

За просто сравнение на два текстови файла с име myfile1 и myfile2, изпълнете командата в терминала:

Разлика myfile1 myfile2

Удобно е да пренасочите изхода на командата diff към файл с разширение diff. Повечето текстови редактори на Linux, като Gedit, разпознават този файл и подчертават неговия синтаксис. За да насочите резултата от сравнението към файла changes.diff, трябва да използвате символа за пренасочване на поток (>):

Diff myfile1 myfile2 > changes.diff

Сравнение на директории, съдържащи текстови файлове

Помислете за пример за сравняване на две директории (mydir1 и mydir2), които съдържат текстови файлове. Основната разлика тук от примера по-горе е, че ще добавим опцията -r, което означава рекурсивно преминаване на файлове в директории.

Diff -r mydir1 mydir2 > changes.diff

Сега да предположим, че директориите, в които сравняваме файлове, съдържат много "боклук", който не трябва да сравняваме. Нека създадем excludeFiles файл и да напишем в него шаблоните и имената на файловете, които не трябва да сравняваме. Например, съдържанието на excludeFiles може да изглежда така:

*.o ChangeLog* *.bak *.exe

Сега нека кажем на командата diff да използва нашия excludeFiles файл, когато сравняваме директории:

Diff -r -X excludeFiles mydir1 mydir2 > changes.diff

По този начин ние сравняваме файлове, чиито имена не съвпадат с шаблоните във файла excludeFiles, например vasya.exe или ChangeLog12.

Нека добавим още няколко опции, които са описани по-горе, за да подобрим резултата от сравнението:

Diff -rwBd -X excludeFiles mydir1 mydir2 > changes.diff

Сравняваме файлове в директориите mydir1 и mydir2, като игнорираме промените, свързани с добавянето на празни редове, интервали, табулатори, и използваме шаблони на имена на файлове в excludeFiles, за да изключим ненужните файлове от сравнението.

Заключение

Можете да получите повече информация за използването на командата diff на вашата Linux система, като изпълните командата:

човек диф

Има и програми, които ви позволяват да сравнявате файлове с помощта на графичен интерфейс. Например програмата Meld, която визуално показва къде и какво се е променило във файловете.