Diff
Diff on komentoriviohjelma, jolla voidaan vertailla kahta eri tiedostoa. Tavallisimpia käyttökohteita on esimerkiksi ohjelmistokehityksessä eri versioiden vertailu. Lisäksi diffiä hyödynnetään mm. korjauspaketeissa ja versionhallintaohjelmissa
Peruskäyttö
Tehdään aluksi kaksi C-kielistä tiedostoa, esimerkiksi hello.c
#include <stdio.h>
void main() {
printf("Hello word");
}
Ja hello2.c
#include <stdio.h>
int main() {
printf("Hello world");
return 0;
}
Esimerkissä uuteen hello2.c-versioon korjattiin kirjoitusvirhe rivillä 3 ja lisättiin funktio palauttamaan 0. Näitä voitaisiin nyt vertailla komennolla
diff hello.c hello2.c
Diffin tuloste olisi seuraavanlainen
2,3c2,4
< void main() {
< printf("Hello word");
---
> int main() {
> printf("Hello world");
> return 0;
< tarkoittaa, että rivi poistui ja > tarkoittaa uutta riviä. Tulosteesta nähdään että alkuperäisen tiedoston rivit 2-3 korvaantuivat viivan alla olevilla uusilla riveillä 2-4.
Vivulla -u diffin tulosteen saa monipuolisemmaksi ja selkeämmäksi. Esimerkkitapauksessamme diff hello.c hello2.c -u antaisi tulosteen
--- hello.c 2006-04-07 10:05:08.000000000 +0000
+++ hello2.c 2006-04-07 10:12:47.000000000 +0000
@@ -1,5 +1,6 @@
#include <stdio.h>
-void main() {
- printf("Hello word");
+int main() {
+ printf("Hello world");
+ return 0;
}
Aluksi nähdään tiedostojen nimet ja niiden viimeiset muokkausajat. Varsinainen tuloste on selkeä, + rivin edessä tarkoittaa lisättyä riviä ja - poistettua. Nyt diff näyttää myös muutaman rivin muutoskohdan ympäriltä mikä selkeyttää tulostetta.
Joskus C-tiedostojen muutokset halutaan yhdistää siten että valinta versioiden välillä tapahtuu käännösvaiheessa. diff -D VER_2_00 hello.c hello2.c >hello_molemmat.c yhdistää versiot siten että kumpikin versio saadaan halutessa aikaan lisäämällä tarvittaessa -D VER_2_00 valitsin.
#include <stdio.h>
#ifndef VER_2_00
void main() {
printf("Hello word");
#else /* VER_2_00 */
int main() {
printf("Hello world");
return 0;
#endif /* VER_2_00 */
}
Hakemistojen vertailu
Diff osaa yksittäisten tiedostojen lisäksi vertailla myös kokonaisia hakemistoja. Tällöin käytetään vipua -r (recursive). Hakemistoja vertaillessa diff käy läpi kaikki hakemistojen tiedostot myös alihakemistoista.
Katso myös
Linkkejä
- FLUG:in Diff-ohje Linux-ohjelmointioppaassa.