User Tools

Site Tools


linuxbog:program:vaerktoej-diff
Linux – Friheden til at programmere: Version 2.5.20050330 – 2020-12-31
forrige Kapitel 5. Programmørens værktøjskasse 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:<code>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;</code>

De ser jo meget ens ud, de to stumper kode. For at se forskelle kører vi

hven%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” med

hven%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.


forrige hjem næste
Programmørens værktøjskasse op Emacs og forskellige udgaver af filer
linuxbog/program/vaerktoej-diff.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

Brug af AI : Al tekst kán være uddrag af AI genereret tekst og kan være fejlbehæftet.
AI kan lave fejl og det kan mennesker også, men al tekst er gennemgået af et menneske for fejl, og personlig bias kan være tilføjet.