^ Linux – Friheden til at programmere: Version 2.5.20050330 – 2020-12-31 ^| | [[program:vaerktoej|forrige]] | Kapitel 5. Programmørens værktøjskasse | [[program:emacs-diff|næste]] | ---- ==== 5.2. diff og patch ==== Ofte vil programmøren skulle se hvad der er ændret mellem to udgaver af en fil. Er der måske 2000 linjer kode er dette ofte umuligt at gøre manuelt, og derfor bør du se nærmere på et par værktøjer der kan hjælpe dig meget. Lad os tage et eksempel på hvordan dette gøres: **Eksempel 5-10. Anvendelse af diff** Først ser vi på en program-stump vi kan kaldeA_org.c. typedef struct { unsigned int R; unsigned int G; unsigned int B; } RGB_Image; typedef struct { int *m,*n; int No; } pixar; Denne skal vi sammenligne medA.c, der ser således ud:typedef struct { unsigned int R; unsigned int G; unsigned int B; } RGB_Image; typedef struct { int *m,*p; int No; } pixar; int a,b,c; De ser jo meget ens ud, de to stumper kode. For at se forskelle kører vihven%diff A_org.c A.c8c8 < int *m,*n; --- > int *m,*p; 10a11,13 > > int a,b,c; Vi kan se at linje 8 er ændret (8c8 betyder at linje 8 iA_org.cer ændret i forhold til linje 8 iA.c). Næste information (10a11,13) er at linje 11 til 13 iA.cer appended, dvs. tilføjet, i forhold til linje 10 iA_org.c. En lille huskeregel mht. > og <: < er filen til venste i argumentlisten til **diff** , og tilsvarende er > filen til højre (2. argument). Det skal også nævnes at man ofte laver en "unified diff" medhven%diff -u A_org.c A.c--- A_org.c Tue Dec 19 21:ec 19 21:56:43 2000 @@ -5,6 +5,8 @@ } RGB_Image; typedef struct { - int *m,*n; + int *m,*p; int No; } pixar; + +int a,b,c; Her er samme information gemt, men med en anden syntaks. Med-og+vises hvilke linjer som er ændret, men også et par af de foregående og efterfølgende linjer kommer også med. Det gør det lidt nemmere at finde stedet for ændringer efterfølgende. Ofte er der kun små ændringer mellem to udgaver af en fil, og derfor ses det ofte at man distribuerer kildetekst til en basisudgave og derefter en eller flere "lapper" til programmet. Lapperne er filer lavet ved at finde forskellen mellem basisudgaven og den nye udgave af filen med **diff** . Lad os se dette i et eksempel. **Eksempel 5-11. Anvendelse af patch** Normalt anvendes lapper til at sende ændringer/opdateringer fra programmøren til andre der programmerer på samme fil(er). Derfor er filnavneA_org.cogA.csom var anvendt i eksemplet ovenfor normalt anvendt som den originale fil i forhold til den nye. Ofte har programmøren to fil-strukturer liggende - den originale og den nye med ændringer. Først lader vi programmøren af programmet danne en lap svarende til forskellen mellem filerneA_org.cogA.chvor de to filer er nævnt ovenfor: hven%diff -u A_org.c A.c > A_patch Bemærk at jeg her, ligesom i de forrige eksempler, vender de to filer så den nye er sidst! Nu kan programmøreren sende lappenA_patchtil andre programmører som kan opdatere deresA.c. Lad os prøve dette. Vi antager nu at vi er brugeren "tyge" som har en filA.csom er lig med programmørens filA_org.c.hven%patch < A_patchpatching file A.c Så nemt er det at opdatere filen. En lap kan indeholde rettelser til mange filer som så automatisk opdateres. ---- | [[program:vaerktoej|forrige]] | [[program:index|hjem]] | [[program:emacs-diff|næste]] | | Programmørens værktøjskasse | [[program:vaerktoej|op]] | Emacs og forskellige udgaver af filer |