De meest simpele manier van het gebruik van diff is
diff <oldfile> <newfile>
.
[marceln@paard hello-1.3]$ diff my/hello.c mynew/hello.c 1a2,4 > #includeWe zien hier dat er nog al wat code bij gekomen is. Er is slechts een regel veranderd. Nu kan de hele wereld onze wijzichen na bouwen.> #include > #include 4c7,11 < printf ("Hello world\n"); --- > struct passwd *pwline; > uid_t user; > user = getuid (); > pwline = getpwuid (user); > printf ("Hello %s\n", pwline->pw_name);
Helaas blijkt dat niet makelijk te gaan. Er staat net niet genoeg
informatie in dit diff file om het patchen ook makelijk te maken.
Daarom zijn er extra opties voor diff om de verschillen van complete
directorie structuren in een file op te slaan en via patch in een keer
toe te passen op een ongemodificeerde source.
De goede manier
diff
Voor het aanmaken van de patch ga onder de directory staan waar de nieuwe
source klaar staat. Je gebruikt dan bijvoorbeeld de volgende opties
diff -Naur <olddir> <newdir>
. Hiermee
creeer je een recursief patch file waarin ook een stuk context van
de veranderingen staan. Hierdoor is het ook mogenlijk om die stukken
in de source te vinden als op die source andere wijzichen plaats hebben
gevonden.
patch
Ga in source directorie staan waarop de patch toegepast moet worden en
geef het commando patch -p1 <patchfile
. Nu worden alle
wijzichen aangebracht. Normaal gesproken krijg je nu een lijst te
zien met geslaagde gepatchde files.
Werkt het?
Een goed voorbeeld dat het gebruik van diff en patch werkt vind ik de
linux kernel. Tussen iedere versie haal je een patch file op waarin
precies de wijzichen staan. Die pas je toe op je kernel source en
je hebt de volgende versie in huis.