Diff
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ä]
- ↑ a b c d diff - compare two files The Open Group. Viitattu 30.4.2019. (englanniksi)
- ↑ 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)
- ↑ 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ä]
- Linux diff command (englanniksi)