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ą.
- lewa: alpha / beta / gamma
- prawa: alpha / BETA / gamma / delta
- LCS = alpha, gamma (2 linie)
- 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.