Diff

Wikipediasta
Siirry navigaatioon Siirry hakuun

UNIXin diff-käsky vertailee kahta tiedostoa ja antaa tulokseksi muutostiedoston.[1] 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[muokkaa | muokkaa wikitekstiä]

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

Esimerkit[muokkaa | muokkaa wikitekstiä]

Oletusmuoto[muokkaa | muokkaa wikitekstiä]

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.[2]

Kontekstimuoto[muokkaa | muokkaa wikitekstiä]

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[muokkaa | muokkaa wikitekstiä]

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.[1] Sama muoto on lisätty myös muihin diff-ohjelman toteutuksiin.[1]

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[muokkaa | muokkaa wikitekstiä]

Hakemistojen vertailuun tarkoitettu -r muoto on peräisin ohjelman BSD-toteutuksesta.[1]

Katso myös[muokkaa | muokkaa wikitekstiä]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. a b c d diff - compare two files The Open Group. Viitattu 30.4.2019. (englanniksi)
  2. a b J. W. Hunt & M. D. McIlroy: An Algorithm for Differential File Comparison (PDF) (Skannattu vuoden 1976 julkaistusta Bell Laboratories Computing Science Technical Report #41) 1976. Bell Labs. Viitattu 30.4.2019. (englanniksi)
  3. M. Douglas McIlroy: A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 (PDF) cs.dartmouth.edu. Viitattu 6.9.2019. (englanniksi)

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]