Skip to main content

Porównaj dwa bloki tekstu i zobacz różnice.

+3 dodanych-2 usuniętych
-function greet(name) {
+function greet(name, greeting = "Hello") {
- console.log("Hello " + name);
+ console.log(greeting + " " + name);
}
greet("World");
+greet("Alice", "Hi");
Wszystkie obliczenia wykonywane są lokalnie w przeglądarce. Dane nie są wysyłane na serwer.

Wyniki mają charakter informacyjny. Potwierdź je w innych źródłach.

Jak działa porównywanie tekstu

Diff znajduje najmniejszy zbiór wstawień i usunięć zamieniający jeden tekst w drugi. Nie wykrywa, że linia „się przesunęła” albo „zmieniła” — to interpretacje, które przeglądarka diffa nakłada na usunięcie i następujące po nim wstawienie.

Jak to działa

  • Wyznacza najdłuższy wspólny podciąg obu wejść, a wszystko poza nim raportuje jako dodane lub usunięte.
  • Domyślnie działa linia po linii, co czyni diffy czytelnymi dla kodu i bezużytecznymi dla przelewanej prozy.
  • Zmienioną linię oznacza jako jedno usunięcie plus jedno wstawienie, bo dokładnie tym jest na poziomie algorytmu.
najdłuższy wspólny podciąg (LCS)
  linie tylko po lewej   → usunięcia
  linie tylko po prawej  → wstawienia
  linie w LCS            → bez zmian

podobieństwo ≈ 2 × długość LCS / (linie lewe + linie prawe)

Przykład z liczbami

Trzyliniowy plik z jedną linią zmienioną i jedną dodaną.

  1. lewa: alpha / beta / gamma
  2. prawa: alpha / BETA / gamma / delta
  3. LCS = alpha, gamma (2 linie)
  4. beta → usunięcie, BETA → wstawienie, delta → wstawienie

Zgłoszone są trzy zmiany, nie dwie: edycja beta liczy się jako usunięcie plus wstawienie. Podobieństwo = 2 × 2 / (3 + 4) = 57%.

Jak czytać wynik

  • Cały akapit przelany na inną szerokość daje diff, w którym zmieniła się każda linia, choć słów zmieniło się ledwie kilka. Przy prozie przełącz na diff słowny albo porównuj źródło sprzed zawijania.
  • Białe znaki na końcu linii i różnice znaków końca linii tworzą fantomowe zmiany. Jeśli cały plik wygląda na zmieniony bez widocznej różnicy, sprawdź najpierw CRLF kontra LF.
  • Wynik zależy od tego, którą stronę nazwiesz „oryginałem”. Zamiana wejść zamienia każde wstawienie w usunięcie, co ma znaczenie przy czytaniu recenzji kodu.
  • To działa w Twojej przeglądarce, więc wklejenie poufnego pliku niczego nie wysyła. Nie dotyczy to każdego narzędzia diff w sieci.

Częste pytania

Dlaczego mój diff pokazuje cały plik jako zmieniony?
Niemal zawsze przez znaki końca linii albo wcięcia. Plik zapisany w Windows i edytowany w Linuksie różni się niewidocznie w każdej linii. Włącz porównanie ignorujące białe znaki albo najpierw znormalizuj końce linii.
Czy pokaże, że przeniosłem blok kodu?
Nie wprost — przeniesienie to usunięcie w jednym miejscu i wstawienie w innym, i standardowy diff tak je raportuje. Część narzędzi wykrywa przeniesienia jako krok po obróbce tego surowego wyniku.