Ero sivun ”Diff” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(hakemistojen vertailu)
Ei muokkausyhteenvetoa
 
(19 välissä olevaa versiota 12 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
Diff on komentoriviohjelma, jolla voidaan vertailla kahta eri tiedostoa. Tavallisimpia käyttökohteita on esimerkiksi [[:Luokk:Ohjelmistokehitys|ohjelmistokehityksessä]] eri versioiden vertailu. Diffiä hyödynnetään esimerkiksi [[subversion]]-versionhallinnassa.
{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
'''diff''' on [[komentorivi]]ohjelma, jolla voidaan vertailla kahta eri tiedostoa. Tavallisimpia käyttökohteita on esimerkiksi [[:Luokka:Kehitystyökalut|ohjelmistokehityksessä]] eri versioiden vertailu. Lisäksi diffiä hyödynnetään mm. [[patch|korjauspaketeissa]], [[versionhallintajärjestelmä|versionhallintaohjelmissa]] sekä [[asetustiedostojen perusteet|asetustiedostojen]] ja ylipäätänsä tekstimuotoisten tiedostojen vertailussa.


== Peruskäyttö ==
diff perustuu rivien vertailuun, joten se ei sovellu dataan, jossa rivit ovat hyvin pitkiä tai missä rivien järjestys, rivinvaihdot tai rivien sisältö vaihtuu vertailun kannalta mielivaltaisesti.
 
==Peruskäyttö==
Tehdään aluksi kaksi [[C]]-kielistä tiedostoa, esimerkiksi
Tehdään aluksi kaksi [[C]]-kielistä tiedostoa, esimerkiksi
hello.c
hello.c
#include <stdio.h>
<source lang="C">
void main() {
#include <stdio.h>
  printf("Hello word");
void main() {
}
    printf("Hello word");
}
</source>
Ja
Ja
helllo2.c
hello2.c
#include <stdio.h>
<source lang="C">
int main() {
#include <stdio.h>
  printf("Hello world");
int main() {
  return 0;
    printf("Hello world");
}
    return 0;
}
</source>
Esimerkissä uuteen hello2.c-versioon korjattiin kirjoitusvirhe rivillä 3 ja lisättiin funktio palauttamaan 0. Näitä voitaisiin nyt vertailla komennolla
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
  diff hello.c hello2.c
Rivi 27: Rivi 34:
< 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.
< 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 <tt>diff hello.c hello2.c -u</tt> antaisi tulosteen
Vivulla -u diffin tulosteen saa monipuolisemmaksi ja selkeämmäksi. Esimerkkitapauksessamme <tt>diff -u hello.c hello2.c</tt> antaisi tulosteen
  --- hello.c      2006-04-07 10:05:08.000000000 +0000
  --- hello.c      2006-04-07 10:05:08.000000000 +0000
  +++ hello2.c      2006-04-07 10:12:47.000000000 +0000
  +++ hello2.c      2006-04-07 10:12:47.000000000 +0000
Rivi 40: Rivi 47:
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.
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.


== Hakemistojen vertailu ==
Joskus C-tiedostojen muutokset halutaan yhdistää siten että valinta versioiden välillä tapahtuu käännösvaiheessa.
<tt>diff -D VER_2_00 hello.c hello2.c >hello_molemmat.c </tt> 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.
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 ==
==Katso myös==
*[[Patch]]
*[[Patch]]
*[[TkDiff]] on graafinen tiedostojen ja kansioiden vertailuun käytettävä apuohjelma.
*[[Meld]] on graafinen tiedostojen ja kansioiden vertailuun käytettävä apuohjelma.
*[[Beyond Compare]]


== Linkkejä ==
[[Luokka:Komentorivin perustyökalut]]
* FLUG:in [http://www.flug.fi/ohjeita/linux-ohjelmointi.html#diff Diff-ohje] Linux-ohjelmointioppaassa.
[[Luokka:Tiedostojen vertailua]]
 
[[Luokka:Komentorivi]]
[[Luokka:Ohjelmistokehitys]]

Nykyinen versio 19. maaliskuuta 2016 kello 14.18

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, versionhallintaohjelmissa sekä asetustiedostojen ja ylipäätänsä tekstimuotoisten tiedostojen vertailussa.

diff perustuu rivien vertailuun, joten se ei sovellu dataan, jossa rivit ovat hyvin pitkiä tai missä rivien järjestys, rivinvaihdot tai rivien sisältö vaihtuu vertailun kannalta mielivaltaisesti.

Peruskäyttö[muokkaa]

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 -u hello.c hello2.c 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[muokkaa]

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

  • Patch
  • TkDiff on graafinen tiedostojen ja kansioiden vertailuun käytettävä apuohjelma.
  • Meld on graafinen tiedostojen ja kansioiden vertailuun käytettävä apuohjelma.
  • Beyond Compare