Diff

UNIXin diff-käsky vertailee kahta tiedostoa ja antaa tulokseksi muutostiedoston. Vertailu kahden version välillä tehdään riveittäin. Oletuksena diff huomioi kaikki muutokset tiedostoon, mukaan lukien muutokset tyhjemerkeissä, mutta tarvittaessa diff käskyn voi komentaa olemaan huomioimatta muutoksia tyhjemerkkien määrässä. 

patch-käsky on diff-käskyyn liittyvä työkalu, joka tuottaa tiedostosta uuden version, kun lähtötietoina on muutostiedosto ja alkuperäinen versio. patch osaa tehdä muutostiedoston kuvaaman muutoksen myös käänteisesti; uusi versio ja muutostiedosto alkuperäisestä uudempaan versioon tuottavat alkuperäisen version.

Diffin tuottamaa tiedostomuotoa käytetään lähes jokaisessa versionhallintajärjestelmässä joka on suunnattu ohjelmointiin UNIX-ympäristössä.

Historia 

Ohjelman käyttämää algoritmia kutsutaan Hunt–McIlroy algoritmiksi vuonna 1976 julkaistun version kehittäjien J. W. Huntin ja M. D. McIlroyn mukaan.

Esimerkit

Oletusmuoto 
Oletetaan, että on kaksi tiedostoa a.txt ja b.txt Oletusvertailu komennolla diff a.txt b.txt voisi tuottaa:
1c1
< heippa
---
> moikka
.. jossa näytetään, että ensimmäisellä rivillä on muutettu sana toiseksi.

Kulmanuolia käyttävä tuloste on alkuperäinen vuonna 1976 julkaistusta versiosta.

Kontekstimuoto 
Kontekstimuoto -c lisää tulostemuotoon muutosta ympäröiviä (edeltäviä tai seuraavia) rivejä.
*** a.txt	2019-04-30 10:13:40.839139283 +0300
--- b.txt	2019-04-30 10:00:40.114513648 +0300
***************
*** 1,2 ****
! heippa
  tekstiä
--- 1,2 ----
! moikka
  tekstiä

Yhdistetty vertailu 
Kahden tiedoston vertailu diff -u tiedosto1 tiedosto2 käskyllä voisi antaa tällaisen tulostuksen:
 --- tiedosto1   2006-05-01 12:01:35.000000000 +0300
 +++ tiedosto2   2006-05-01 12:02:00.000000000 +0300
 @@ -1,4 +1,4 @@
  Evoluution mekanismeja ovat muun muassa luonnonvalinta, mutaatiot ja
 -migraatio.Teorian mukaan luonnonvalinta johtaa populaation parempaan 
 +migraatio. Teorian mukaan luonnonvalinta johtaa populaation parempaan 
  sopeutumiseen ympäristöönsä, sillä menestyneimmistä yksilöistä tulee 
  lopulta vallitseva tyyppi populaatiossa tehokkaamman lisääntymisen myötä.
Tulostuksesta nähdään, että tiedostojen välillä oleva ero on kirjoitusvirheen korjaus (- ja + alkuiset rivit). Tässä käytettiin -u-vipua, joka luo yhdistetyn tulosteen. Tämä muoto on laajempi ja sisältää muutaman rivin ennen ja jälkeen muutetun rivin. 

Wayne Davisonin kehittämä -u muoto on peräisin GNU diff -toteutuksesta ja vie vähemmän tilaa kuin aikaisemmin kehitetty kontekstimuoto -c. 
Sama muoto on lisätty myös muihin diff-ohjelman toteutuksiin.

Jos käyttäjällä on vanha versio tiedostosta hallussaan ja hän saa muutostiedoston kohti uudempaa, voi hän käyttää patch-käskyä tuottamaan uudemman version:
 # patch tiedosto1 < muutostiedosto
 patching file tiedosto1
Minkä jälkeen tiedosto1 on sama kuin tiedosto2 (edellisen esimerkin mukaan).

Hakemistovertailu 
Hakemistojen vertailuun tarkoitettu -r muoto on peräisin ohjelman BSD-toteutuksesta.

Katso myös
 Muutostiedosto
 Tulostumaton merkki
 Levenšteinin etäisyys

Lähteet

Aiheesta muualla 
 Linux diff command 

Unix-ohjelmat
Ohjelmistot