Diff

diff on UNIXiin kuuluva ohjelma, joka 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 on diffiin 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 == Ohjelma oli mukana ainakin jo 1974 julkaistussa Unixin versiossa 5. Tämä ohjelma perustuu Harold S. Stonen algoritmiin.https://minnie.tuhs.org/cgi- bin/utree.pl?file=V5/usr/source/s1/diff1.c Ohjelman käyttämää algoritmia kutsutaan Hunt–McIlroy algoritmiksi vuonna 1976 julkaistun version kehittäjien J. W. Huntin ja M. D. McIlroyn mukaan. diffin avulla voitiin luoda edit scriptejä, jotka sisältävät ohjauskomentoja ed tai ex-editoreille, joilla muutokset voi yhdistää alkuperäiseen ohjelmaan. Tämä käyttö on myöhemmän patch-ohjelman ansiosta nykyisin turhaa.GNU diffutils § 2.5.1 ed Scripts https://www.gnu.org/software/diffutils/manual/html_node/ed-Scripts.html Unix Power Tools, O'Reilly § 28.9 ex Scripts Built by diff docstore.mik.ua/orelly/unix/upt/ch28_09.htm Vuonna 1984 Larry Wall julkaisti uutisryhmissä mod.sources ja net.sources patch- ohjelman,https://groups.google.com/g/net.sources/c/qtfVio1sSHs/m/G0cPT5HFDFcJ joka osaa yhdistää diffin tulostuksen alkuperäiseen tekstiin. Diff kuuluu Unix-työkaluohjelmat määrittäviin standardeihin. Se oli mukana X/Open Portability Guidessa 1987, POSIX.1-2001 lisäsi Context mode -diffin ja POSIX.1-2008 Unified diffin. ==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ä === Unified diff === 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 Luokka:Unix-ohjelmat Luokka:Ohjelmistot