Porównanie folderów i plików w systemie Linux. Porównywanie plików w systemie Linux (polecenie diff)

), ich porównania, a także porównania klientów GUI dla nich. Były też dyskusje na temat wtyczek IDE do pracy z git i mercurial. Ale praktycznie nie było żadnych informacji o narzędziach do porównywania wizualnego i łączenia narzędzi do rozwiązywania konfliktów.

Niedawno „przeskoczyłem” z Mercurial (który nadal uważam za wygodniejszy i logiczny) na git, ponieważ zdecydowana większość interesujących mnie projektów korzysta z gita i jest hostowana na githubie. W związku z tym pojawiło się pytanie o rewizję arsenału narzędzi, w szczególności pytanie wybór narzędzia wizualne porównanie i łączenie (różnicowanie i łączenie). Aby uzupełnić braki w informacjach na temat huba, zdecydowałem się napisać tę minirecenzję. Jak to mówią – w pościgu.

Poniżej znajdziesz także przykłady ustawień Git do użycia z DiffMerge i WinMerge w systemie Windows. Myślę, że zaoszczędzi to dużo czasu.

Nazwa Osobliwości Platforma

KDiff3

Git i WinMerge

1) Dodaj do katalogu c:/Git/libexec/git-core/mergetools/
plik winmerge o następującej zawartości:

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=$? )
Kiedy Gitowi nie uda się automatycznie scalić zmian, pojawia się konflikt scalania i do pliku będącego w konflikcie dodawane są znaczniki scalania (<<<<<<<, =======, и >>>>>>>). Są one niezbędne do rozwiązania konfliktu za pomocą narzędzi innych firm.
Spójrzmy na plik readme.txt który powstaje w wyniku połączenia oddziałów mistrzowski i nowy w powyższym przykładzie:

<<<<<<< HEAD master str ======= new str >>>>>>> nowość
Możemy otworzyć plik konfliktu za pomocą programu WinMerge, aby rozwiązać konflikt.

Spowoduje to otwarcie narzędzia do scalania dwukierunkowego:

W oparciu o opisaną logikę przepiszemy polecenie merge merge_cmd w następujący sposób:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
W rzeczywistości obie powyższe opcje są równoważne.

2) Edytujmy .gitconfig
narzędzie = winmerge cmd = „winmerge” narzędzie = winmerge cmd = „winmerge” trustExitCode = fałsz keepBackup = fałsz
Ostatnia linia anuluje zapisywanie plików kopii zapasowych w katalogu repozytorium.

3) Stwórzmy konflikt podczas łączenia dwóch gałęzi (patrz przykład użycia DiffMerge).
git difftool master new // porównaj dwie gałęzie

Aby rozwiązać konflikt podczas łączenia oddziałów, użyj polecenia
git mergetool

Webmasterzy lub właściciele witryn często muszą porównywać dwa pliki na podstawie treści. Z tego artykułu dowiesz się, jak porównać ze sobą dwa pliki. Wszystkie znane mi metody porównywania plików tekstowych i skryptów (html, css, php i tak dalej) są opisane tutaj.

Metoda 1. Połącz

Połączyć- graficzne narzędzie do uzyskiwania różnic i łączenia dwóch plików, dwóch katalogów. Meld to wizualne narzędzie do porównywania i łączenia plików i katalogów dla systemu Linux. Meld jest skierowany przede wszystkim do programistów. Może się jednak przydać każdemu użytkownikowi, który potrzebuje dobrego narzędzia do porównywania plików i katalogów.

W Meld możesz porównać dwa lub trzy pliki lub dwa lub trzy katalogi. Możesz wyświetlić kopię roboczą z popularnych systemów kontroli wersji, takich jak CVS, Subversion, Bazaar-NG i Mercurial. Meld jest dostępny dla większości dystrybucji Linuksa (Ubuntu, Suse, Fedora itp.) i jest obecny w ich głównych repozytoriach.

# aptitude zainstaluj połączenie

Metoda 2: Porównanie zawartości dwóch plików w WinMerge.

Darmowy program WinMerge umożliwia porównywanie nie tylko zawartości plików, ale także zawartości całych folderów. WinMerge to narzędzie do porównywania i scalania typu Open Source dla systemu Windows. WinMerge może porównywać zarówno pliki, jak i foldery, wyświetlając różnice w wizualnej formie tekstowej, która jest łatwa do zrozumienia i przetworzenia.

Po instalacji otwórz punkt menu „Plik” - „Otwórz”. Wybierz pliki do porównania. Aby to zrobić, kliknij przycisk „Przeglądaj” i wybierz plik. Po wybraniu plików kliknij przycisk „OK”.

Możesz także edytować pliki w WinMerge. Po zamknięciu okna porównania program zaproponuje zapisanie zmian w plikach.

Metoda 3. różnica

różnica- narzędzie do porównywania plików, które wyświetla różnicę między dwoma plikami.

    Aby porównać katalogi użyj tego polecenia: $ diff -qr< current-directory> < backup-directory>

Metoda 4. Komparuj

Kompare - wyświetla różnice pomiędzy plikami. Potrafi porównywać zawartość plików lub katalogów, a także tworzyć, wyświetlać i stosować pliki poprawek. Kompare to graficzne narzędzie do porównywania, które pozwala znajdować różnice w plikach, a także je łączyć. Napisany w Qt i zaprojektowany głównie dla KDE. Oto jego główne cechy:

    Obsługuje wiele formatów różnicowych;

    Obsługa porównywania plików i katalogów systemu Linux;

    Wsparcie dla przeglądania plików różnicowych;

    Konfigurowalny interfejs;

    Tworzenie i stosowanie poprawek do plików.

Metoda 5. Porównywanie plików w Total Commander

    Obsługiwane systemy operacyjne: Windows

Total Commander posiada narzędzie do porównywania plików według zawartości, za pomocą którego możesz nie tylko porównywać zawartość, ale także ją edytować i kopiować z jednego pliku do drugiego.

Po uruchomieniu Total Commander - w jednym z paneli wybierz (klawisz Wstaw) pierwszy plik do porównania - w drugim panelu otwórz folder z drugim plikiem i umieść na nim kursor. Wywołaj program do porównania: „Pliki → Porównaj według zawartości”.

Aby wprowadzić zmiany w pliku, wystarczy kliknąć przycisk „Edytuj”. Program oferuje funkcje kopiowania i przywracania, wyszukiwania i kodowania. Jeżeli dokonałeś zmian w pliku, po zamknięciu okna porównania zostaniesz poproszony o zapisanie zmian.

Metoda 6. Porównaj pliki w Notepad++

    Obsługiwane systemy operacyjne: Windows, można uruchomić na systemie Linux

Notepad++ nie może porównywać plików. Aby ta funkcjonalność pojawiła się w Notepad++, musisz zainstalować wtyczkę „Porównaj”.

Uruchom edytor - przejdź do punktu menu „Wtyczki” - „Menedżer wtyczek” - „Pokaż menedżera wtyczek”. W nowym oknie wybierz wtyczkę „Porównaj” i kliknij przycisk „Zainstaluj”.

Po zainstalowaniu wtyczki otwórz dwa pliki i wybierz menu „Wtyczki” - „Porównaj” - „Porównaj (Alt+D)”. Wynik porównania plików zostanie zaprezentowany w osobnych panelach. Naprzeciw linii, w których występują różnice, pojawi się znak ostrzegawczy.

Metoda 7: Porównywanie plików przy użyciu wiersza poleceń systemu Windows

Porównanie za pomocą wiersza poleceń systemu Windows (cmd.exe) nie pozwala na edycję plików, ale za pomocą tej metody można po prostu porównać zawartość plików.

Aby otworzyć wiersz poleceń systemu Windows, przejdź do „Start” - „Wszystkie programy” - „Akcesoria” - „Wiersz poleceń” lub naciśnij klawisz „Windows + R”, wpisz cmd i naciśnij klawisz Enter.

W wierszu poleceń wpisz polecenie:

fc / N ścieżka do pierwszego pliku ścieżka do drugiego pliku

), ich porównania, a także porównania klientów GUI dla nich. Były też dyskusje na temat wtyczek IDE do pracy z git i mercurial. Ale praktycznie nie było żadnych informacji o narzędziach do porównywania wizualnego i łączenia narzędzi do rozwiązywania konfliktów.

Niedawno „przeskoczyłem” z Mercurial (który nadal uważam za wygodniejszy i logiczny) na git, ponieważ zdecydowana większość interesujących mnie projektów korzysta z gita i jest hostowana na githubie. W związku z tym pojawiło się pytanie o rewizję arsenału narzędzi, w szczególności pytanie wybór narzędzia wizualne porównanie i łączenie (różnicowanie i łączenie). Aby uzupełnić braki w informacjach na temat huba, zdecydowałem się napisać tę minirecenzję. Jak to mówią – w pościgu.

Poniżej znajdziesz także przykłady ustawień Git do użycia z DiffMerge i WinMerge w systemie Windows. Myślę, że zaoszczędzi to dużo czasu.

Nazwa Osobliwości Platforma

KDiff3

Git i WinMerge

1) Dodaj do katalogu c:/Git/libexec/git-core/mergetools/
plik winmerge o następującej zawartości:

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=$? )
Kiedy Gitowi nie uda się automatycznie scalić zmian, pojawia się konflikt scalania i do pliku będącego w konflikcie dodawane są znaczniki scalania (<<<<<<<, =======, и >>>>>>>). Są one niezbędne do rozwiązania konfliktu za pomocą narzędzi innych firm.
Spójrzmy na plik readme.txt który powstaje w wyniku połączenia oddziałów mistrzowski i nowy w powyższym przykładzie:

<<<<<<< HEAD master str ======= new str >>>>>>> nowość
Możemy otworzyć plik konfliktu za pomocą programu WinMerge, aby rozwiązać konflikt.

Spowoduje to otwarcie narzędzia do scalania dwukierunkowego:

W oparciu o opisaną logikę przepiszemy polecenie merge merge_cmd w następujący sposób:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
W rzeczywistości obie powyższe opcje są równoważne.

2) Edytujmy .gitconfig
narzędzie = winmerge cmd = „winmerge” narzędzie = winmerge cmd = „winmerge” trustExitCode = fałsz keepBackup = fałsz
Ostatnia linia anuluje zapisywanie plików kopii zapasowych w katalogu repozytorium.

3) Stwórzmy konflikt podczas łączenia dwóch gałęzi (patrz przykład użycia DiffMerge).
git difftool master new // porównaj dwie gałęzie

Aby rozwiązać konflikt podczas łączenia oddziałów, użyj polecenia
git mergetool

Nieważne, w jakim systemie będę musiał majstrować przy kodzie, prędzej czy później porównywanie różnych wersji kodu źródłowego stanie się zbyt kosztowne. Oto proste, bezpłatne narzędzia do wyszukiwania różnic w plikach dla systemów Linux, Windows i Mac. Ogólny format uruchomienia – plik1 plik2.

Pod Windowsem zadanie porównywania zawartości plików (a nawet katalogów, co czasem nie jest bezużyteczne) radzi sobie dobrze z WinMerge. Łatwy. Nie jest powiązany z żadnym IDE. Jest napisany w Qt i jest wieloplatformowy - powinien także działać na Nikach. Oprócz plików potrafi także porównywać zawartość katalogów (m.in. na podstawie masek wyrażeń regularnych). Możesz dodać dodatkowe wtyczki.

WinMerge to wieloplatformowe narzędzie do porównywania plików i nie tylko

Mac - opendiff. Jest to oddzielny komponent XCode. Samodzielny program można uruchomić z wiersza poleceń. Podkreśla różnice kolorem bladoszarym, ale przy okazji może pokazać strzałkami, co gdzie zostało dodane. Może wykonać scalanie (klawisz -merge). Jeśli oprócz porównywanych plików podasz wspólny plik przodka po kluczu -ancestor, wówczas porównanie zostanie z nim wykonane. Potrafi porównywać foldery.

narzędzie opendiff - bezpłatne narzędzie do porównywania plików na komputerze Mac

Linux – . Dostępny na wszystkich platformach (Windows, Mac, Linux) ze względu na fakt, że jest również napisany w Qt. Można porównać maksymalnie trzy pliki lub katalogi. Obsługuje możliwość łączenia zmian, z obsługą edycji w celu ręcznego rozwiązywania konfliktów.

Narzędzie kdiff3 - porównywanie dwóch plików

AKTUALIZACJA 18.10.2013

Jeśli pracujesz w Gnom na nikach, to meld będzie doskonałym wyborem. Integracja z popularnymi systemami kontroli wersji (Git, Subversion itp.), narzędzia do łączenia - auto-łączenie, edycja z wychwytywaniem na bieżąco różnic, podświetlanie składni. Istnieją porty dla systemu OS X Windows.

Cóż, w ostateczności (jeśli nie możesz zainstalować niczego zewnętrznego), na ratunek przychodzi brzydka różnica z wiersza poleceń (preinstalowana na systemach typu Nix, w tym na komputerach Mac i Solaris). Elastyczny. Można długo i z entuzjazmem bawić się ustawieniami, aby móc wyświetlić różnice na podstawie maski (-F), uzyskać porównanie w zwykłych dwóch kolumnach (klawisz obok siebie) itp. W przypadku dużych, nieznanych plików wolę wydruk w formacie „kontekstowym”, gdy wyświetlane są nie tylko zmienione linie, ale także te sąsiadujące z nimi.

Do porównania więcej niż dwóch plików może być odpowiedni diff3.

Zazwyczaj diff generuje dane wyjściowe w następującym formacie:

$diff plik1 plik2 2c2< Helllo --- >Cześć

Istnieje jednak specjalny parametr wiersza poleceń (-y), który nakazuje narzędziu wyświetlanie danych w dwóch oddzielnych kolumnach. A to jest przykład takiego wyjścia:

$ diff -y plik1 plik2 Cześć Cześć Cześć | Witam, do widzenia

Oczywiście przy użyciu tego formatu wyjściowego znak „|”. używany do oznaczania różnych linii.

5. Ukrywanie identycznych wierszy

Jeśli uważnie przyjrzysz się wynikom poprzedniego przykładu (z sekcji 4 powyżej), przekonasz się, że użycie opcji wiersza poleceń -y powoduje, że narzędzie diff wyświetla nie tylko zmienione linie, ale także identyczne linie plików przetwarza. Jeśli chcesz usunąć identyczne linie z wyniku, możesz użyć opcji --suppress-common-lines.

$ diff -y --suppress-common-lines plik1 plik2 Witam | Cześć

6. Wydrukowanie nazw funkcji języka C zawierających zmodyfikowany kod

Używając narzędzia diff do porównania dwóch plików kodu źródłowego C, możesz użyć specjalnej opcji (-p), która nakazuje narzędziu wydrukować nazwy funkcji, w których wykryto zmiany. Załóżmy na przykład, że chcesz porównać następujące dwa pliki kodu źródłowego C:

Plik o nazwie plik1.c:

#włączać void porównaj(float x, float y) ( if(x == y) // nieprawidłowy sposób porównania ( printf("\n SĄ RÓWNE temu \n"); ) ) int main(void) ( porównaj(1.234, 1.56789 ); zwróć 0;

Plik o nazwie plik2:

#włączać void porównaj(float x, float y) ( if(x == y) ( printf("\n SĄ RÓWNE \n"); ) ) int main(void) ( porównaj(1.234, 1.56789); return 0; )

Oto wynik normalnego porównania tych plików:

$ różnica plik1.c plik2.c 5c5< if(x == y) // некорректный способ сравнения --- >jeśli(x == y)

A to wynik porównania tych samych plików przy użyciu parametru -p:

$ diff -p plik1.c plik2.c *** plik1.c 2016-12-29 11:45:36.587010816 +0530 --- plik2.c 2016-12-29 11:46:39.823013274 +0530 **** *********** *** 2.8 **** void Compare(float x, float y) ( ! if(x == y) // nieprawidłowy sposób porównania ( printf("\n ARE RÓWNE \n"); ) --- 2.8 ---- void Compare(float x, float y) ( ! if(x == y) ( printf("\n SĄ RÓWNE \n"); )

Oczywiście, jeśli użyta zostanie opcja wiersza poleceń -p, diff generuje bardziej szczegółowe dane wyjściowe, zaznaczając zmodyfikowane linie znakiem wykrzyknika („!”).

7. Rekurencyjne porównywanie zawartości podkatalogów

Narzędzie diff pozwala także na rekurencyjne porównywanie zawartości podkatalogów, ale ten tryb działania nie jest domyślnie włączony. Miałem na myśli to, używając tego polecenia:

$ diff pliki-różnicy/pliki-diff-diff/pliki-diff-diff/plik1 pliki-diff-diff/plik1 1c1< Hi --- >różnicuję pliki-różnicowe/plik2 pliki-diff-diff/plik2 2c2< Hello --- >cześć

Narzędzie diff porówna tylko pliki z katalogów najwyższego poziomu, ale jeśli użyjesz parametru -r (aktywującego tryb rekurencyjnego porównywania plików), porówna nawet pliki znajdujące się w podkatalogach:

$ diff -r pliki-diff/ drugie pliki-różnicy/ diff -r pliki-diff/plik1 pliki-diff-diff/plik1 1c1< Hi --- >i diff -r pliki-diff/plik2 drugie pliki-różnicy/plik2 2c2< Hello --- >ello diff -r pliki-diff/więcej-plików-diff/plik1 pliki-diff-diff/więcej plików-diff/plik1 1c1< Hi --- >i diff -r pliki-diff/więcej-plików-diff/plik2 pliki-diff-diff/więcej plików-diff/plik2 2c2< Hello --- >cześć

8. Traktuj brakujące pliki jako puste

Narzędzie diff obsługuje również opcję, dzięki której możesz nakazać mu traktowanie brakujących plików jako pustych. Jeśli porównasz pliki o nazwach plik1 i plik3 (a ten drugi plik nie istnieje), domyślnie diff wyświetli komunikat o błędzie:

$ diff plik1 plik3 diff: plik3: Nie ma takiego pliku ani katalogu

Nie ma w tym niczego złego; w rzeczywistości takie zachowanie jest całkowicie uzasadnione. Są jednak chwile, gdy chcesz uniknąć komunikatów o błędach (być może podczas używania diff w skryptach powłoki), w których możesz użyć opcji -N, aby potraktować brakujące pliki jako puste i kontynuować porównywanie plików.

$ diff -N plik1 plik3 1.5d0< Hi < < Helllo < < Bye

Wniosek

Jeśli dokładnie przeczytałeś oba artykuły z tej serii i niezależnie powtórzyłeś wszystkie omówione w nich przykłady poleceń, to całkiem możliwe jest stwierdzenie, że opanowałeś wszystkie podstawowe umiejętności pracy z danym narzędziem. Oczywiście nie mogliśmy omówić wszystkich kwestii związanych z różnicą w kilku artykułach, niemniej jednak wszystkie główne cechy i funkcje tego narzędzia zostały w nich wspomniane w ten czy inny sposób.

Jeśli chcesz dowiedzieć się więcej o tym narzędziu, zawsze możesz zajrzeć do jego strony podręcznika. Myślę, że nie warto jeszcze raz wspominać, że należy okresowo używać narzędzia z różnymi zestawami parametrów, aby symulować różne sytuacje robocze.