Açıq
Yaxın

Linux ölçüsünə görə faylların müqayisəsi. Vizual müqayisə və birləşmə münaqişələrinin həlli üçün alətlərin icmalı. Komanda sintaksisi diff-ə bənzəyir



Linux terminalında iki faylın müqayisəsi (6)

Bunun üçün mənim həllim budur:

Mkdir temp mkdir nəticələri cp /usr/share/dict/american-english ~/temp/american-english-dictionary cp /usr/share/dict/british-english ~/temp/british-english-dictionary cat ~/temp/american -ingilis-lüğət | wc -l > ~/nəticələr/count-amerikan-ingilis-lüğəti cat ~/temp/british-english-dictionary | wc -l > ~/nəticələr/count-british-ingilis-lüğət grep -Fxf ~/temp/american-english-dictionary ~/temp/british-english-dictionary > ~/results/common-english grep -Fxvf ~/results /ümumi-ingiliscə ~/temp/amerikan-ingilis-lüğəti > ~/nəticələr/unique-american-english grep -Fxvf ~/results/common-english ~/temp/british-english-dictionary > ~/results/unique-british -ingilis

adlı iki fayl var "a.txt""b.txt", y olan sözlər siyahısı var. İndi hansı sözlərin əlavə olunduğunu yoxlamaq istəyirəm "a.txt" və içində deyillər "b.txt" .

Mənə səmərəli alqoritm lazımdır, çünki iki lüğəti müqayisə etməliyəm.

Siz iki faylı müqayisə etmək üçün Linux-da fərq alətindən istifadə edə bilərsiniz. Lazımi məlumatları süzmək üçün istifadə edə bilərsiniz variantları --dəyişik-qrup formatı--dəyişməmiş-qrup formatı .

Hər seçim üçün uyğun qrupu seçmək üçün aşağıdakı üç seçimdən istifadə edilə bilər:

    "% <" получить строки из FILE1

    "%>" FILE2-dən sətirlər alır

    "" (boş sətir) hər iki fayldan sətirləri silmək üçün.

Misal üçün: fərq --changed-group-format = "%<" --unchanged-group-format = "" file1.txt file2.txt

[ tmp]# cat file1.txt test bir test iki test üç test dörd test səkkiz [ tmp]# cat file2.txt test bir test üç test doqquz [ tmp]# diff --changed-group-format="%<" --unchanged-group-format="" file1.txt file2.txt test two test four test eight

Əgər siz git diff-in diff çıxış tərzinə üstünlük verirsinizsə, ondan git deposunda olmayan faylları müqayisə etmək üçün --no-index bayrağı ilə istifadə edə bilərsiniz:

Git diff --no-index a.txt b.txt

Hər birində 200k fayl adı sətirləri olan bir neçə fayldan istifadə edərək, bu yanaşmanı və digər cavabları burada müqayisə etdim (quraşdırılmış vaxt əmri ilə):

Git diff --no-index a.txt b.txt # ~1.2s comm -23<(sort a.txt) <(sort b.txt) # ~0.2s diff a.txt b.txt # ~2.6s sdiff a.txt b.txt # ~2.7s vimdiff a.txt b.txt # ~3.2s

comm indiyə qədər ən sürətli kimi görünür, git diff --no-index isə diff üslublu çıxış üçün ən sürətli yanaşma kimi görünür.

Yeniləmə 25-03-2018 Əslində git repozitoriyasında deyilsinizsə və həmin repozitoriyada oynatıla bilməyən faylları müqayisə etmək istəyirsinizsə, --no-index bayrağını buraxa bilərsiniz. Kişi səhifələrindən:

Bu forma iki fayl sistemi yolundan məlumatları müqayisə etmək üçün nəzərdə tutulmuşdur. Git tərəfindən idarə olunan işləyən ağacda və iş ağacının xaricindəki yol nöqtələrindən ən azı birində əmr işlədərkən və ya əmri Git tərəfindən idarə olunan işçi ağacdan kənarda işləyərkən -no-index seçimini buraxa bilərsiniz.

comm -13 istifadə edin (çeşidlənmiş fayllar tələb olunur) :

$ cat file1 bir iki üç $ cat file2 bir iki üç dörd $ comm -13<(sort file1) <(sort file2) four

Onları çeşidləyin və comm istifadə edin:

Comm-23<(sort a.txt) <(sort b.txt)

comm giriş fayllarını müqayisə edir (çeşidləyir) və standart olaraq üç sütunu çıxarır: a üçün unikal olan sətirlər, b üçün unikal olan sətirlər və hər ikisində mövcud olan sətirlər. -1 , -2 və/və ya -3 qeyd etməklə siz müvafiq çıxışı sıxışdıra bilərsiniz. Buna görə də comm -23 ab yalnız a üçün unikal olan girişləri siyahıya alır. İstifadə etdiyim sintaksisdir<(...) для сортировки файлов на лету, если они уже отсортированы, вам это не нужно.

vim quraşdırmısınızsa, bunu cəhd edin:

Vimdiff fayl 1 fayl 2

Vim -d fayl1 fayl2

onu fantastik tapacaqsınız.

Linux-da iki və ya daha çox faylı müqayisə etmək üçün diff əmri var. Həm fərdi faylları, həm də qovluqları müqayisə edə bilər. Diff əmrinin sintaksisinə, seçimlərinə və bəzi istifadə nümunələrinə baxaq.

diff əmr sintaksisi

Diff əmri aşağıdakı sintaksisə malikdir:

Fərq [seçimlər] fayl və ya kataloqlar

Biz seçimləri müəyyənləşdiririk və müqayisə etməmiz lazım olan iki və ya daha çox fayl və ya qovluğu təqdim edirik.

diff əmr seçimləri

Diff əmrinin əsas variantlarına baxaq. Mən yalnız ən çox istifadə etdiyim variantları nəzərdən keçirəcəyəm.

-EMətnə nişan simvolu əlavə etməklə yaranan dəyişikliklərə məhəl qoymayın.
-bBoşluqların əlavə edilməsi nəticəsində yaranan dəyişikliklərə məhəl qoymayın.
-wBoşluqların və tabların əlavə edilməsini nəzərdə tutan dəyişikliklərə məhəl qoymayın.
-Byeni boş sətirlərə məhəl qoymayın.
-p (və ya --show-c-funksiya)dəyişikliklərin aşkar edildiyi C dili funksiyasının adını göstərin.
-y (və ya --yan-yan)nəticələri iki sütunda göstərin.
-rqovluqları rekursiv şəkildə nəzərdən keçirin.
-X FAYLadları FILE faylındakı nümunələrə uyğun gələn axtarış fayllarından xaric edin.
-d (və ya --minimal)mümkün qədər az dəyişiklik tapmağa çalışın (yəni yanlış pozitivləri istisna edin).

Diff əmrindən istifadə nümunələri

İki mətn faylının müqayisəsi

Sadəcə myfile1 və myfile2 adlı iki mətn faylını müqayisə etmək üçün terminalda əmri yerinə yetirin:

Fərq myfile1 myfile2

Diff əmrinin çıxışını diff uzantılı fayla yönləndirmək rahatdır. Gedit kimi əksər Linux mətn redaktorları bu faylı tanıyır və onun sintaksisini vurğulayır. Müqayisə nəticəsini dəyişikliklər.diff faylına yönəltmək üçün axın yönləndirmə simvolundan (>) istifadə etməlisiniz:

Fərq myfile1 myfile2 > changes.diff

Mətn faylları olan qovluqların müqayisəsi

Mətn faylları olan iki kataloqun (mydir1 və mydir2) müqayisəsi nümunəsinə baxaq. Burada yuxarıdakı nümunədən əsas fərq ondan ibarətdir ki, biz -r variantını əlavə edəcəyik, yəni o, qovluqlardakı faylları rekursiv şəkildə keçəcək.

Fərq -r mydir1 mydir2 > dəyişikliklər.fərq

İndi tutaq ki, faylları müqayisə etdiyimiz qovluqlarda müqayisə etməməli olduğumuz çoxlu “zibil”lər var. Gəlin excludeFiles faylı yaradaq və ona müqayisə etməməli olduğumuz faylların nümunələrini və adlarını yazaq. Məsələn, excludeFiles məzmunu belə görünə bilər:

*.o ChangeLog* *.bak *.exe

İndi diff əmrinə deyək ki, kataloqları müqayisə edərkən bizim excludeFiles faylımızdan istifadə etsin:

Fərq -r -X excludeFiles mydir1 mydir2 > dəyişikliklər.diff

Beləliklə, adları excludeFiles faylındakı nümunələrə uyğun gəlməyən faylları müqayisə edirik, məsələn, vasya.exe və ya ChangeLog12.

Müqayisə nəticəsini yaxşılaşdırmaq üçün yuxarıda təsvir edilən daha bir neçə variant əlavə edək:

Fərq -rwBd -X excludeFiles mydir1 mydir2 > dəyişikliklər.diff

Biz mydir1 və mydir2 qovluqlarındakı faylları müqayisə edirik, boş sətirlər, boşluqlar, nişanlar əlavə etməklə bağlı dəyişikliklərə məhəl qoymuruq, həmçinin lazımsız faylları müqayisədən xaric etmək üçün excludeFiles-da fayl adı nümunələrindən istifadə edirik.

Nəticə

Linux sisteminizdə diff əmrindən istifadə haqqında ətraflı məlumat üçün aşağıdakı əmri işlədə bilərsiniz:

İnsan fərqi

Qrafik interfeysdən istifadə edərək faylları müqayisə etməyə imkan verən proqramlar da var. Məsələn, fayllarda harada və nəyin dəyişdiyini vizual olaraq göstərən Meld proqramı.

), onların müqayisələri, eləcə də onlar üçün GUI müştərilərinin müqayisəsi. Git və mercurial ilə işləmək üçün IDE plaginləri haqqında da müzakirələr aparılıb. Amma praktik olaraq məlumat yox idi vizual müqayisə və münaqişələrin həlli vasitələrinin birləşməsi haqqında.

Bu yaxınlarda mən mercurialdan (hələ də daha rahat və məntiqli hesab edirəm) git-ə “atladım”, çünki mənim üçün maraqlı olan layihələrin böyük əksəriyyəti git-dən istifadə edir və github-da yerləşdirilir. Bununla əlaqədar olaraq, alətlərin arsenalına yenidən baxılması, xüsusən də sual yarandı alət seçimi vizual müqayisə və birləşmə (fərqlənmə və birləşmə). Hub haqqında məlumat çatışmazlığını doldurmaq üçün bu mini icmalı yazmaq qərarına gəldim. Necə deyərlər - isti təqibdə.

Kəsimin altında siz Windows altında DiffMerge və WinMerge ilə istifadə üçün Git parametrlərinin nümunələrini tapa bilərsiniz. Düşünürəm ki, bu, çox vaxta qənaət edəcək.

ad Xüsusiyyətlər Platforma

KDiff3

Git və WinMerge

1) Kataloqa əlavə edin c:/Git/libexec/git-core/mergetools/
aşağıdakı məzmunlu winmerge faylı:

Diff_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Proqram Faylları (x86) )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 status=$? )
Git avtomatik olaraq dəyişiklikləri birləşdirə bilmədikdə birləşmə münaqişəsi baş verir və birləşmə markerləri ziddiyyətli fayla əlavə olunur (<<<<<<<, =======, и >>>>>>>). Onlar üçüncü tərəfin vasitələrindən istifadə edərək münaqişəni həll etmək üçün lazımdır.
Gəlin fayla baxaq readme.txt budaqların birləşməsi nəticəsində yaranır usta ve yeni yuxarıdakı misalda:

<<<<<<< HEAD master str ======= new str >>>>>>> yeni
Münaqişəni həll etmək üçün WinMerge proqramından istifadə edərək münaqişə faylını aça bilərik.

Bu, ikitərəfli birləşmə alətini açacaq:

Təsvir edilən məntiqə əsaslanaraq birləşmə əmrini yenidən yazacağıq birləşmə_cmd aşağıdakı şəkildə:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
Əslində, yuxarıda göstərilən hər iki variant ekvivalentdir.

2) Gəlin redaktə edək .gitconfig
alət = winmerge cmd = "winmerge" aləti = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
Son sətir ehtiyat nüsxə fayllarının depo kataloqunda saxlanmasını ləğv edir.

3) İki qolu birləşdirərkən konflikt yaradaq (DiffMerge istifadə edərək nümunəyə baxın).
git difftool master new // iki filialı müqayisə edin

Filialları birləşdirərkən münaqişəni həll etmək üçün əmrdən istifadə edin
git mergetool

), onların müqayisələri, eləcə də onlar üçün GUI müştərilərinin müqayisəsi. Git və mercurial ilə işləmək üçün IDE plaginləri haqqında da müzakirələr aparılıb. Amma praktik olaraq məlumat yox idi vizual müqayisə və münaqişələrin həlli vasitələrinin birləşməsi haqqında.

Bu yaxınlarda mən mercurialdan (hələ də daha rahat və məntiqli hesab edirəm) git-ə “atladım”, çünki mənim üçün maraqlı olan layihələrin böyük əksəriyyəti git-dən istifadə edir və github-da yerləşdirilir. Bununla əlaqədar olaraq, alətlərin arsenalına yenidən baxılması, xüsusən də sual yarandı alət seçimi vizual müqayisə və birləşmə (fərqlənmə və birləşmə). Hub haqqında məlumat çatışmazlığını doldurmaq üçün bu mini icmalı yazmaq qərarına gəldim. Necə deyərlər - isti təqibdə.

Kəsimin altında siz Windows altında DiffMerge və WinMerge ilə istifadə üçün Git parametrlərinin nümunələrini tapa bilərsiniz. Düşünürəm ki, bu, çox vaxta qənaət edəcək.

ad Xüsusiyyətlər Platforma

KDiff3

Git və WinMerge

1) Kataloqa əlavə edin c:/Git/libexec/git-core/mergetools/
aşağıdakı məzmunlu winmerge faylı:

Diff_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Proqram Faylları (x86) )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 status=$? )
Git avtomatik olaraq dəyişiklikləri birləşdirə bilmədikdə birləşmə münaqişəsi baş verir və birləşmə markerləri ziddiyyətli fayla əlavə olunur (<<<<<<<, =======, и >>>>>>>). Onlar üçüncü tərəfin vasitələrindən istifadə edərək münaqişəni həll etmək üçün lazımdır.
Gəlin fayla baxaq readme.txt budaqların birləşməsi nəticəsində yaranır usta ve yeni yuxarıdakı misalda:

<<<<<<< HEAD master str ======= new str >>>>>>> yeni
Münaqişəni həll etmək üçün WinMerge proqramından istifadə edərək münaqişə faylını aça bilərik.

Bu, ikitərəfli birləşmə alətini açacaq:

Təsvir edilən məntiqə əsaslanaraq birləşmə əmrini yenidən yazacağıq birləşmə_cmd aşağıdakı şəkildə:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
Əslində, yuxarıda göstərilən hər iki variant ekvivalentdir.

2) Gəlin redaktə edək .gitconfig
alət = winmerge cmd = "winmerge" aləti = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
Son sətir ehtiyat nüsxə fayllarının depo kataloqunda saxlanmasını ləğv edir.

3) İki qolu birləşdirərkən konflikt yaradaq (DiffMerge istifadə edərək nümunəyə baxın).
git difftool master new // iki filialı müqayisə edin

Filialları birləşdirərkən münaqişəni həll etmək üçün əmrdən istifadə edin
git mergetool

Veb ustaları və ya veb sayt sahibləri tez-tez məzmuna əsasən iki faylı müqayisə etməlidirlər. Bu məqalədən iki faylı bir-biri ilə necə müqayisə edəcəyinizi öyrənəcəksiniz. Mətn faylları və skriptləri (html, css, php və s.) müqayisə etmək üçün mənə məlum olan bütün üsullar burada təsvir edilmişdir.

Metod 1. Meld

Meld- fərqləri əldə etmək və iki faylı, iki qovluğu birləşdirmək üçün qrafik alət. Meld Linux üçün vizual fayl və kataloq müqayisəsi və birləşmə vasitəsidir. Meld ilk növbədə tərtibatçılara yönəlib. Bununla belə, faylları və qovluqları müqayisə etmək üçün yaxşı alətə ehtiyacı olan hər hansı bir istifadəçi üçün faydalı ola bilər.

Meld-də siz iki və ya üç faylı və ya iki və ya üç qovluğu müqayisə edə bilərsiniz. İş nüsxəsinə CVS, Subversion, Bazaar-NG və Mercurial kimi məşhur versiya idarəetmə sistemlərindən baxa bilərsiniz. Meld əksər Linux paylamaları (Ubuntu, Suse, Fedora və s.) üçün mövcuddur və onların əsas depolarında mövcuddur.

# qabiliyyət quraşdırma meld

Metod 2: WinMerge-də iki faylın məzmununun müqayisəsi.

Pulsuz WinMerge proqramı yalnız faylların məzmununu deyil, həm də bütün qovluqların məzmununu müqayisə etməyə imkan verir. WinMerge Windows üçün Açıq Mənbə fərq və birləşmə alətidir. WinMerge həm faylları, həm də qovluqları müqayisə edə, fərqləri başa düşmək və emal etmək asan olan vizual mətn formasında göstərə bilər.

Quraşdırıldıqdan sonra "Fayl" - "Açıq" menyusunu açın. Müqayisə etmək üçün faylları seçin. Bunu etmək üçün "Browse" düyməsini basın və faylı seçin. Faylları seçdikdən sonra "OK" düyməsini basın.

Siz həmçinin WinMerge-də faylları redaktə edə bilərsiniz. Müqayisə pəncərəsini bağladıqdan sonra proqram dəyişiklikləri fayllarda saxlamağı təklif edəcək.

Metod 3. fərq

fərq- iki fayl arasındakı fərqi göstərən fayl müqayisəsi proqramı.

    Kataloqları müqayisə etmək üçün bu əmrdən istifadə edin: $ diff -qr< current-directory> < backup-directory>

Metod 4. Müqayisə et

Kompare - fayllar arasındakı fərqləri göstərir. Faylların və ya qovluqların məzmununu müqayisə edə, həmçinin patch faylları yarada, göstərə və tətbiq edə bilər. Kompare, fayllardakı fərqləri tapmağa və onları birləşdirməyə imkan verən qrafik fərq proqramıdır. Qt dilində yazılmış və əsasən KDE üçün hazırlanmışdır. Onun əsas xüsusiyyətləri bunlardır:

    Çox fərqli formatları dəstəkləyir;

    Linux faylı və qovluqlarının müqayisəsini dəstəkləmək;

    Fərqli fayllara baxmaq üçün dəstək;

    özelleştirilebilir interfeys;

    Fayllara yamaqların yaradılması və tətbiqi.

Metod 5. Total Commander-də faylların müqayisəsi

    Dəstəklənən Əməliyyat Sistemləri: Windows

Total Commander-in məzmuna görə fayl müqayisə aləti var, burada siz nəinki məzmunu müqayisə edə, həm də onu redaktə edə və bir fayldan digərinə köçürə bilərsiniz.

Total Commander proqramını işə saldıqdan sonra - panellərdən birində müqayisə üçün birinci faylı seçin (Daxil et) - ikinci paneldə ikinci fayl olan qovluğu açın və kursoru onun üzərinə qoyun. Müqayisə üçün proqramı çağırın: “Fayllar→Məzmuna görə müqayisə et”.

Faylda dəyişiklik etmək üçün "Düzəliş et" düyməsini sıxmağınız kifayətdir. Proqram kopyalama və geri qaytarma, axtarış və kodlaşdırma funksiyalarını təklif edir. Əgər faylda dəyişiklik etmisinizsə, müqayisə pəncərəsini bağladıqdan sonra sizdən dəyişiklikləri yadda saxlamaq təklif olunacaq.

Metod 6. Notepad++ proqramında faylları müqayisə edin

    Dəstəklənən əməliyyat sistemləri: Windows, Linux-da işləyə bilər

Notepad++ faylları müqayisə edə bilməz. Bu funksiyanın Notepad++ proqramında görünməsi üçün siz “Müqayisə et” plaqini quraşdırmalısınız.

Redaktoru işə salın - "Pluginlər" - "Plugin meneceri" - "Plugin menecerini göstər" menyusuna keçin. Yeni pəncərədə "Müqayisə et" plaginini seçin və "Quraşdır" düyməsini basın.

Plugini quraşdırdıqdan sonra iki faylı açın və "Plugins" - "Müqayisə et" - "Müqayisə (Alt+D)" menyusunu seçin. Fayl müqayisəsinin nəticəsi ayrı panellərdə təqdim olunacaq. Fərqlərin aşkar edildiyi xətlərin qarşısında xəbərdarlıq işarəsi görünəcək.

Metod 7: Windows əmr sorğusundan istifadə edərək faylları müqayisə edin

Windows əmr satırından (cmd.exe) istifadə edərək müqayisə faylları redaktə etməyə imkan vermir, ancaq bu üsuldan istifadə edərək sadəcə olaraq faylların məzmununu müqayisə edə bilərsiniz.

Windows əmr satırını açmaq üçün "Başlat" - "Bütün Proqramlar" - "Aksesuarlar" - "Əmr əmri" bölməsinə keçin və ya "Windows + R" düyməsini basın, cmd yazın və Enter düyməsini basın.

Komanda sorğusunda əmri daxil edin:

fc / N birinci fayl yolu ikinci fayl yolu