DokumentyObrazyMediaNarzędzia PDF

Porównaj Tekst Online — Diff dwóch tekstów

Porównuj wersje kodu, umów i artykułów, a każdą zmianę wizualizuj za pomocą kolorów.

Przetworzone w Twojej przeglądarce — żaden tekst nie jest wysyłany na serwer

Widoczne różnice w kilka sekund

Diff wierszowy i znakowy

Wizualizuj zmiany zarówno na poziomie wierszy, jak i pojedynczych znaków w każdym zmodyfikowanym wierszu.

100% prywatny

Porównanie odbywa się w Twojej przeglądarce. Twoje teksty nie są nigdy wysyłane na żaden serwer.

Algorytm Myersa

Implementacja algorytmu Myers diff O(n+d), tego samego, którego git używa wewnętrznie do swoich diff-ów.

Natychmiastowy

Wyniki pojawiają się w trakcie wklejania tekstu — bez potrzeby klikania przycisku konwersji.

Trzy kroki, żadnych komplikacji

1

Wklej oba teksty

Wprowadź oryginalny tekst w lewym panelu, a zmodyfikowany w prawym. Mogą to być kod, dokumenty lub dowolny tekst niesformatowany.

2

Wizualizuj różnice

Dodane wiersze wyświetlają się na zielono, usunięte na czerwono, a w zmodyfikowanych wierszach zmiana jest wyróżniona na poziomie pojedynczych znaków.

3

Analizuj zmiany

Nawiguj po różnicach przyciskami Poprzedni/Następny. Sprawdź podsumowanie dodanych, usuniętych i niezmiennych wierszy.

Masz pytania?

Nowoczesne algorytmy diff bazują na wyznaczaniu LCS (Longest Common Subsequence — najdłuższej wspólnej podciągu). Mając dwa teksty A i B, algorytm odnajduje najdłuższy ciąg wierszy, który pojawia się w obu tekstach w tej samej kolejności. Wiersze z A, które nie wchodzą w skład LCS, są oznaczane jako usunięte (czerwony), a wiersze z B, które nie wchodzą w skład LCS — jako dodane (zielony). Algorytm Hunta-McIlroya (1975), użyty w oryginalnym poleceniu Unix diff, sformalizował to podejście.

Zielony oznacza wiersze dodane w nowym tekście, których nie było w oryginale. Czerwony oznacza usunięte wiersze obecne w oryginale, które nie istnieją w nowej wersji. Żółty lub brak koloru oznacza wiersze niezmienione (kontekst). W trybie diff na poziomie znaków, wewnątrz zmodyfikowanego wiersza, nowe znaki wyróżnione są ciemną zielenią, a usunięte ciemną czerwienią — dzięki temu widoczna jest dokładna zmiana w obrębie wiersza.

Diff wierszowy traktuje każdy wiersz jako niepodzielną jednostkę: wiersz albo istnieje, albo nie — dokładnie tak jak robi to polecenie git diff. Jest idealny dla kodu, gdzie zmiany zachodzą między całymi wierszami. Diff znakowy (zwany też word diff lub char diff) działa wewnątrz każdego zmodyfikowanego wiersza i pokazuje dokładnie, które znaki lub słowa uległy zmianie. Jest bardziej przydatny dla prozy, umów lub tekstów, w których zmiany są drobnymi redakcjami wewnątrz akapitów.

Diff jest fundamentem kontroli wersji (git diff pokazuje zmiany przed zatwierdzeniem), przeglądu kodu (pull requesty na GitHub prezentują diff), porównywania dokumentów prawnych (umowy, regulaminy między wersjami), dziennikarstwa i weryfikacji faktów (porównywanie wersji komunikatów prasowych) oraz debugowania (porównywanie oczekiwanego wyniku z rzeczywistym w testach). Używany jest również w patchach oprogramowania: pliki .patch to zunifikowane diff-y, które polecenie git apply może zastosować do repozytorium.

LCS (Longest Common Subsequence) to problem polegający na znalezieniu najdłuższego podciągu wspólnego dla dwóch sekwencji, bez zmiany kolejności elementów. W przypadku diff tekstu sekwencjami są wiersze tekstu. LCS reprezentuje wiersze, które się nie zmieniły; wszystko, co nie należy do LCS, stanowi zmianę. Standardowy algorytm programowania dynamicznego dla LCS ma złożoność O(n×m), gdzie n i m to długości obu sekwencji. Efektywniejsze algorytmy, takie jak Myers diff (1986), osiągają złożoność O(n+d), gdzie d to liczba różnic.

Jak działa diff tekstu: od polecenia Unix do gita

Polecenie diff zostało wprowadzone w systemie Unix przez Douga McIlroya w 1974 roku i stało się podstawowym narzędziem ekosystemu Unix. Jego oryginalny algorytm, sformalizowany przez Hunta i McIlroya w artykule 'An Algorithm for Differential File Comparison' (1975), oblicza najdłuższy wspólny podciąg (LCS) dwóch plików i wyraża różnice jako minimalny zestaw operacji wstawienia i usunięcia. Ta zasada matematyczna pozostaje fundamentem wszystkich nowoczesnych narzędzi diff.

W 1986 roku Eugene Myers opublikował ulepszony algorytm redukujący złożoność do O(n+d), gdzie d to liczba różnic, co sprawia, że jest on znacznie szybszy, gdy pliki są podobne (niewiele różnic). To właśnie ten algorytm Git stosuje wewnętrznie dla git diff, git log -p oraz widoków pull requestów na GitHub i GitLab. Format wyjściowy unified diff (z wierszami poprzedzonymi przez +, - i spację) stał się powszechnym standardem wymiany poprawek między projektami oprogramowania.

Poza kodem, diff ma zastosowanie w dziennikarstwie danych (porównywanie wersji oficjalnych dokumentów), prawie (wykrywanie zmian między wersjami umów) i nauce (porównywanie sekwencji genomowych). Convertir.ai implementuje algorytm Myers diff w całości w przeglądarce, z wizualizacją na poziomie wierszy i znaków, bez wysyłania tekstów na jakikolwiek serwer. Jest to szczególnie istotne przy porównywaniu poufnych dokumentów, takich jak umowy, kod zastrzeżony lub wrażliwe dane.