Terminal fredag: Patch and Diff

To av de viktigste verktøyene i programvareutvikling er patch y diff. Det er ikke et mysterium hvordan de fungerer, men jeg tror dette blir et interessant innlegg. 

Begge er veldig kraftige, og dette er akkurat som å berøre overflaten, de har flere verktøy og andre funksjoner. I utgangspunktet med disse to verktøyene kan vi lage versjonskontroll,


diff

Vi refererer til sammenligning, den sammenligner en "original" fil med den "nye", og informerer oss om forskjellene som eksisterer mellom dem. Dette verktøyet lar oss også lage .patch-filer som vi bruker til å lage oppdateringer for programmene våre.


patch

Det er kommandoen som vi bokstavelig talt "lapper" vår originale fil ved å legge til og / eller fjerne linjer i henhold til instruksjonene i .patch-filen.


Det er også vimdiff, som er et visuelt verktøy for å bruke oppdateringer uten behov for en .patch-fil, siden den sammenligner "original" og "new", og på samme fil er det mulig å redigere linje for linje eller hele dokumentet. Dette vil jeg ikke forklare, men jeg synes det fortjener en omtale.


Ejemplo

Nå er moroa. Eksempel!

Dette er tilfelle, vi har et flott manus som ber om navn og alder, hvis du er over 18 år, forteller den deg at du kan stemme, ellers forteller det deg at du ikke kan stemme.

original.sh

#! / bin / bash echo "Skriv inn navnet ditt:" read name echo "Angi alderen din:" read age if [[18 -lt $ age]] og ekko "Hello $ name, du er $ gammel og du kan stemme!" ellers ekko "Hallo $ navn, du er $ gammel og du kan ikke stemme ..." fi
Bilde av koden i Vim

Bilde av koden i Vim

Ferdig, her er det løpende skriptet:

Alt ser ut til å fungere bra

Alt ser ut til å fungere bra

Så som gode brukere vi er, deler vi skriptet vårt med en venn :), men vi får en melding om at det har en feil, at når det er 18, står det at det ikke kan stemme når det skal.

Logikkfeil :(

Logisk feil 

Nå begynner vi å rette den lille feilen og gjøre noen modifikasjoner ...

new.sh

#! / bin / bash maxAge = 18 echo "Skriv inn navnet ditt:"; les navnet ekko "Skriv din alder:"; les alder hvis [[$ maxAge -le $ age]]; så ekko "Hallo $ navn, du er $ år gammel og du kan stemme!" ellers ekko "Hallo $ navn, du er $ år gammel og du kan ikke stemme ..." fi exit 0
Ny kode skrevet i Vim

Ny kode skrevet inn Vim

Anta at manuset er veldig tungt. Så, for ikke å sende hele skriptet igjen, lager vi en .patch 

$ diff -u original.sh new.sh> patch.patch

Og nå har vi vår lapp. Her er en oversikt over Vim:

Slik ser instruksjonene for en .patch ut. I hvitt ble linjene som ikke ble modifisert, i blå de fjernet, i oransje de som ble lagt til.

Slik ser instruksjonene for en .patch ut. I hvitt ble linjene som ikke ble modifisert, i blå de fjernet, i oransje de som ble lagt til.

Og for å bruke den bruker vi ganske enkelt .patch-filen i skriptet som skal patches. Her kalles originalAmigo.sh, som er en eksakt kopi av skriptet original.sh

Venneskript

Venneskript

$ patch originalFriend.sh <patch.patch

Og dette etterlater oss vår fil originalAmigo.sh Så:

Venneskript etter påføring av lapp

Venneskript etter påføring av lapp

Som du kan se er det veldig enkelt å få forskjellene og bruke lappene. Det hele kommer fra meg.

Hilsen folk, vi vil lese neste fredag.


Legg til som foretrukket kilde i Google