Most recent comments
Liveblogg nyttårsaften 2017
Tor, 11 months, 2 weeks
Jogging og blogging
Are, 1 year, 11 months
Liveblogg nyttårsaften 2016
Are, 1 year, 11 months
Reading in dark times
Are, 2 years, 1 month
Moldejazz 2016
Camilla, 2 years, 4 months
Dørskilt
Karoline, 2 years, 5 months
Halifax
Tor, 2 years, 5 months
Sony Smartwatch 3 review
Tor, 2 years, 6 months
Numerikk, takk
Tor, 2 years, 6 months
Topp tur
Camilla, 2 years, 8 months
50 book challenge
Camilla, 11 months, 2 weeks
Controls
Register

diff

I det siste har jeg jobbet med en artikkel jeg har skrevet sammen med han jeg deler kontor med og veilederen vår. Når man jobber på et felles prosjekt på denne måten, finnes det et par verktøy som kan hjelpe deg å forbli sinnsfrisk. Om man ser bort fra de mer esoteriske tingene, som for eksempel collaborative real-time editors, vil jeg si at de to viktigste tingene er et godt versjonskontrollsystem, og en eller flere varianter av diff.

Versjonskontroll tenkte jeg egentlig å skrive en mer solid artikkel om senere, men meget kort forklart er dette et system som lar deg loggføre endringer du gjør. Det kan være nyttig om man jobber alene på et prosjekt, da det gir deg muligheten til å enkelt gå tilbake til tidligere versjoner, og det er absolutt essensielt om man jobber flere sammen, da det er et system for å slå sammen endringer hvis to personer har redigert den samme filen samtidig. Personlig foretrekker jeg Mercurial, men git skal visst også være bra. Det vil si, git er det som brukes til å holde styr på linux-kjernen, som har flere millioner kodelinjer og flere tusen utviklere, så det er åpenbart bra, men jeg tror kanskje det er litt vel hardcore.

Når versjonskontroll er i boks er det lett å se når de andre på prosjektet har gjort endringer, og hvilke kommentarer de har skrevet til endringene sine, men det kan fortsatt være essensielt å se nøyaktig hva som er endret i en fil. Og her kommer diff inn i bildet. Det er kanskje litt rart å snakke om diff som et eget verktøy, da de fleste (eller alle?) versjonskontrollsystemer kommer med denne funksjonaliteten innebygd, men prinsippet er det samme som for klassisk kommandolinjediff. Det dreier seg rett og slett om et program som forteller deg hva som er forskjellen på to filer. For eksempel, sett at jeg har disse to filene:
First we take
Manhattan, sa han. Then
we take Berlin. Det hørtes jo
fint ut. Først tar vi
Kampetrikken. Så
tar vi Jarlen Kino. Så tar
vi Vestkantbadet. Og Folketrygden
First we take
Manhattan, sa han. Then
we take Hamburg. Det hørtes jo
fint ut. Først tar vi
Kampetrikken. Så
tar vi Jarlen Kino. Så tar
vi Vestkantbadet. Og Folketrygden
Fra Byen ved hoggjernets fot, av Jan Erik Vold, løftet herfra.

Hvis man kjører diff på disse to filene (last ned her for å prøve selv) vil resultatet se slik ut:
3c3
< we take Berlin. Det hørtes jo
---
> we take Hamburg. Det hørtes jo

Det dette forteller deg er essensielt at for å endre den første filen slik at den blir lik den andre filen, må du endre linje 3 som indikert. Med andre ord, den eneste forskjellen på disse to filene finnes i linje 3. En eller annen variant av diff er et meget nyttig verktøy når man laster ned en ny versjon av en fil, for eksempel en artikkel på mange sider, og lurer på nøyaktig hva som er endret.

Av og til kan det imidlertid være litt upraktisk å bruke diff. I eksempelet over var det greit, siden hver linje er nokså kort. Linje 3 blir dermed en praktisk ting å forholde seg til. I en vanlig artikkel vil derimot hvert avsnitt som regel utgjøre en egen linje i kildekoden. (En linje i den virkelige verden er en ting som er adskilt fra andre linjer med linjeskift. At noe tilfeldigvis vises fordelt over flere linjer betyr ikke nødvendigvis at det er flere linjer.) Når to linjer består av kanskje hundre ord hver kan det være litt vanskelig å se med en gang hva forskjellen består i, spesielt hvis det er små endringer.

Heldigvis har en eller annen smarting løst dette problemet, ved å lage programmet latexdiff. Latexdiff finner diffen mellom to latex-filer, og spytter ut en ny latex-fil, som frekt indikerer med både fine farger og gjennomstreking hva som er lagt til og hva som er fjernet. Her er et eksempel fra artikkelen jeg har jobbet med i det siste:

Alt dette er skrevet på én linje i kildekoden, så med vanlig diff ville man bare fått vite at noe i denne linjen er endret. Latexdiff, derimot, forteller deg med nesten magisk eleganse hva forskjellen består i.

Fantastisk, eller hur?

-Tor Nordam
Are likes this

Comments

Men jeg tror jeg ville drept alt for mange trær hvis jeg skulle brukt det på doktorgraden. Kanskje når jeg får rettinger? Da kan det jo være greit å ha.

Are,  03.05.12 14:58

Folk som ikke er så tøffe som Tor kan i stor grad oppnå det samme med "Spor endringer" i OOO/Office ;)

I systemutvikling er versjonskontroll helt sentralt. Interessant tema er det også. Personlig har jeg bare brukt ClearCase og subversion - ikke fått prøvd git enda. Git er alles favoritt nå om dagen innenfor mitt miljø. Det er i prinsippet enkelt, men har en liten terskel man må komme over i starten for å få prinsippene ordentlig innabords.
Are,  03.05.12 15:00

Forresten, Tor: Jeg synes det er like kult hver gang du tar for deg et eller annet som er en del av min hverdag og forteller om det fra ditt perspektiv :) Som for eksempel her, eller i de tidligere artiklene om programmering.

git

Tor,  03.05.12 15:20

Jeg vurderte å flytte Calcuttagutta-koden fra svn til mercurial, men kanskje vi skal ta steget til git, og samtidig komme oss over på github. Google blir jo bare ondere og ondere for hver dag.
Tor,  03.05.12 20:30

Enig. La oss diskutere kompilatorflagg over et glass vin en dag.
Category
Technology
Tags
diff
versjonskontroll
Views
2373