^ 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 |