Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

Sistemi za kontrolu verzija

Sistemi za kontrolu verzija


Subversion

Problemi kod timskog


razvoja softvera

Integracija i distribucija promena

Runa integracija postaje praktino


nemogua sa vie od 4 programera.

1/3

Problemi kod timskog


razvoja softvera

2/3

uvanje i analiza istorije projekta

Potrebno je imati informacije o svim


promenama kao i motivima koji su do njih
doveli.

Potrebna je mogunost vraanja na bilo koju


verziju projekta iz prolosti po vremenu
nastanka ili nekom drugom kriterijumu

Problemi kod timskog


razvoja softvera

3/3

Isprobavanje alternativnih tokova razvoja

U razvoju projekta esto se javlja potreba za


ispravkom greaka u nekim starijim
verzijama projekta.

Nekad je potrebno da jedan ili vie lanova


tima isprobaju rizian pravac koji moe ali i
ne mora biti uspean. Potrebno je da ova
aktivnost ne utie na glavni (stabilan) tok
razvoja.

Reenje

Sistemi za kontrolu verzija

Spadaju u iru grupu alata Sistemi za


upravljanje softverskim konfiguracijama
(Software Configuration Management)

Omoguavaju praenje promena nad kodom


(i drugim artifaktima/fajlovima) softverskog
projekta.

Omoguavaju integraciju promena nastalu od


strane razliitih lanova tima.

Omoguavaju dobijanje informacija ko je,


kada, gde, promenio odreene linije koda.

...

Podela sistema za
kontrolu verzija

Na osnovu naina na koji je


implementiran repozitorijum

Centralizovane

Decentralizovane

Na osnovu naina obavljanja operacija

Lock-Modify-Unlock

Copy-Modify-Merge

Centralizovani SKV

Predstavnici

CVS,
Subversion
V. SourceSafe ...

Prednosti

Repoz.

Jednostavnija imlementacija
Jednostavniji backup
Uvid u stanje celokupnog projekta

Mane

loa skalabilnost
jedna taka otkaza
tea saradnja izmeu tzv. commiter-a i
noncommiter-a

Decentralizovani SKV
Repoz.

Repoz.

Predstavnici

Prednosti

GNU Arch, SVK, BitKeeper...

dobra skalabilnost pogodan za velike


projekte (npr. linux kernel)
distribuirana administracija
jednostavno formiranje podtimova

Mane

Repoz.

sloenija implementacija
uvid u stanje celog projekta nije mogu

Lock-Modify-Unlock semantika

Fajl koji elimo da menjamo moramo prvo


zakljuati.
Ukoliko je fajl zakljuan moe da ga
menja samo onaj programer koji je fajl
zakljuao.
Kada zavrimo sa izmenom potrebno je
fajl otkljuati.
Problem ne postoji paralelizam fajlovi
se auriraju serijski
Problem - zakljuao i otiao na ruak.

Copy-Modify-Merge semantika

Za fajl koji eli da se menja kreira se


lokalna kopija.
Vri se modifikacija lokalne kopije.
Fajl se automatski spaja sa eventualnim
promenama koje su u meuvremenu
napravili ostali lanovi tima.
Prednost: paralelno auriranje fajlova.
Mana: mogunost nastanka konflikta
izmene istih linija fajla.

Subversion glavne
osobine

Virtualni fajl sistem sa revizijama

1/3

Inicijalno fajl sistem ima reviziju 0 i sa


svakom promenom revizija se uveava za 1.

Operacija commit je ACID (Atomicity,


Consistency, Isolation, Durability)
Svaki fajl moe da ima dodatne
metapodatke

metapodaci imaju revizije

u obliku su klju-vrednost. Posebni kljuevi


imaju posebnu namenu (npr. svn:ignore
nad direktorijumima)

Subversion glavne
osobine

Izbor mrenog sloja

http, https, svn, ssh+svn itd.

Konzistentno tretiranje fajlova

Automatski prepoznaje binarne fajlove i


ponaa se u skladu sa tim

uva samo promene bilo da je u pitanju


tekstualni ili binarni fajl

Efikasno korienje mrenih resursa

U oba smera (klijent-server-klijent) se alju


samo nastale promene.

2/3

Subversion glavne
osobine

Efikasno kreiranje oznaka i grana

3/3

Operacija kreiranja oznake (tag) i grane


(branch) se svodi na operaciju copy koja je
jeftina sa stanovita potronje memorije i
brzine izvoenja. Vreme izvoenja copy
operacije izmeu dva URL-a ne zavisi od
koliine podataka koji se kopiraju i odvija se
veoma brzo.

Konzistentan izlaz komandi pogodan za


automatizovano parsiranje

Pojednostavljena je obrada putem pipeovanja izlaza komande na naredne komande


(npr. perl, sed, awk itd.)

Subversion scenario
korienja

Ukoliko nemamo lokalnu kopiju projekta


kreiramo je operacijom checkout.
Ukoliko imamo lokalnu kopiju osveavamo
je operacijom update. Operaciju update
vrimo svaki put kada elimo da preuzmemo
promene iz repozitorijuma.
Kada elimo da promene koje smo napravili
postanu vidljive u repozitorijumu radimo
operaciju commit.
Operacija update moe u odreenim
sitacijama izazvati konflikte koje je potrebno
razreiti pre operacije commit.

Subversion alati iz
komandne linije

svn

svnadmin

svnlook

svnversion

svnserve

svndumpfilter

Subversion podeavanje
radnog okruenja

Alati iz komandne linije

podeavanje PATH primenjive okruenja

podeavanje EDITOR promenjive okruenja

Subclipse eclipse subversion klijent

Instalacija plugina.

Potrebno je znati adresu repozitorijuma

za unos log poruka

npr. https://puppet.tmd.ns.ac.yu/svn/test

Potrebno je znati korisniko ime i lozinku


ukoliko to repozitorijum zahteva

Subversion preporueni
layout repozitorijuma
Root
|----- Naziv projekta 1--- trunk---dir1
|
|
|----- dir2
|
|
|----- dir3
|
|
|
|---------- branches
|
|
|----ime grane1--- dir1 grane1
|
|
|
|------- dir2 grane2
|
|
|---- ime grane2 --- dir1 grane2
|
|
...
|
|----------- tags
|
|----ime taga1--- dir1 grane1
|
|
|------- dir2 grane2
|
|---- ime taga2 --- dir1 grane2
|
...
|------ Naziv projekta2----

1/2

Subversion preporueni
layout repozitorijuma

2/2

trunk osnovna linija razvoja projekta


tags direktorijum u kojem se uvaju
oznake (kopije trunka u odreenim
trenutcima razvoja projekta)
branches direktorijum u kome se uvaju
alternativne linije razvoja projekta

Subversion virtuelni fajl


sistem

Ne postoji pretpostavka o nainu


korienja direktorijuma unutar fajl
sistema. Svi direktorijumi su isti to se
tie samog Subversion-a.
Preporueni layout ne mora da se koristi.
Moe se, u zavisnosti od naina upotrebe,
veliine i broja projekata, definisati
drugaiji layout.

Subversion kreiranje
radne kopije

Operacija koja kreira lokalnu radnu kopiju


je checkout.
Potrebno je navesti putanju do
direktorijuma koji se co. Najee je u
pitanju trunk unutar nekog projekta.
Za razliku od obinih fajlova i
direktorijuma na disku. Direktorijumi
radne kopije ima skrivene metainformacije u .svn direktorijumima.

Subversion operacija preuzimanja


promena iz repozitorijuma

Operacija je update
Sve promene koje su nastale u
repozitorijumu od poslednje operacije
update (ili checkout) postae vidljive u
radnoj kopiji.
Moe izazvati konflikt.
Navoenjem revizije, ovom komandom je
mogue radnu kopiju vratiti u bilo koji
trenutak iz prolosti.

Subversion operacija slanja


promena u repozitorijum

Operacija je commit.
Sve promene u lokalnoj kopiji koje su
nastale od poslednje operacije commit e
postati vidljive u repozitorijumu.
Ukoliko postoje promene u repozitorijumu
koje su izvor potencijalnog konflikta SVN
e zahtevati da se prethodno uradi
operacija update.
Po zavrenoj operaciji commit revizija
repozitorijuma e biti vea za 1 a
promene e biti vidljive u tekuoj reviziji

Subversion dodavanje i
brisanje

Nad fajlovima lokalne kopije koje elimo


da stavimo pod kontrolu verzija
izvravamo add komandu
U subclipse-u je ova operacija integrisana
u commit dijalog.
Fajlove moemo izvaciti iz kontrole verzija
sa delete komandom

Subversion ponitavanje
lokalnih promena

Lokalne promene nad fajlom/fajlovima


mogue je ponititi komandom revert
Zadavanjem ove komande bie vraen
sadraj tzv. BASE revizije, odnosno revizije
od koje smo krenuli i nainili lokalnu
promenu
Ova operacija moe da se izvede i bez veze
sa repozitorijumom (offline). Ovo je mogue
jer SVN u meta-informacijama lokalne kopije
uva kompletnu verziju koja je stigla iz
repozitorijuma. Ovo omoguava i offline
pregled lokalnih promena (diff)

Subversion - konflikti

1/4

Mogu ih izazvati operacije koje menjaju


lokalnu kopiju (update, switch...)
Nastaju kod paralelnih izmena u
situacijama kada je automatsko spajanje
nemogue izvesti (npr. menjane iste linije
koda, ili isti binarni fajlovi) pa je potrebna
runa intervencija.

Subversion - konflikti

2/4

Prilikom nastanka kreiraju se tri dodatna


fajla u lokalnoj kopiji za fajl nad kojim je
konflikt nastao.

Ako je naziv fajla X tada se kreiraju fajlovi

X.mine backup originalnog fajla sa lokalnim


izmenama.
X.r<BASE verzija> (npr. X.r56) verzija fajla od
koje smo krenuli sa izmenama
X.r<HEAD verzija> (npr. X.r59) poslednja verzija
fajla iz repozitorijuma

Originalni fajl X, ukoliko je tekstualni, u sebi


ima markere koji oznaavaju segmente koda
koji je u konfliktu

Subversion - konflikti

Markeri u kodu
<<<<<<< .mine
<kod lokalne kopije>
=======
<kod iz repozitorijuma>
>>>>>>> .r<tekua(HEAD) verzija>

3/4

Subversion - konflikti

4/4

Razreavanje

Izmenom X fajla

Kopiranjem dodatnih fajlova preko X fajla

brisanje markera
izmena koda tako da bude u skladu sa onim to
elimo. Moemo ostaviti na kod, ostaviti ono to
je stiglo iz repozitorijuma ili napisati neto novo.
Ukoliko zadravamo samo nae promene
kopiramo X.mine fajl
Ukoliko zadravamo samo promene iz rep.
kopiramo X.r<HEAD revizija> fajl
Ukoliko odustajemo od svih izmena kopiramo
X.r<BASE revizija> fajl

Na kraju izdajemo komandu resolved nad


konfliktnim fajlom (ili briemo privremene
fajlove)

Subversion - revizije

numerike

simbolike

kreu od 0
HEAD
BASE
COMMITED
PREV

datumske

po vremenu i datumu
predstavlja reviziju koja je kreirana
neposredno pre zadatog trenutka
ukoliko se vreme ne navede smatra se
poetak dana

Subversion istorija
projekta

Log operacija omoguava pregled


informacija o svakom pojedinanom
commit-u.
Mogue je dobiti razlike izmeu razliitih
revijia istog fajla diff operacija (sa
subclipse-om je ove razlike mogue
vizuelno prikazati)
komande info, status, blame itd.

Subversion - kopiranje

1/2

Operacija copy kreira kopiju


fajla/direktorijuma unutar repozitorijuma
Mogue je kopirati
URL na URL
RK na RK
URL na RK
RK na URL

Subversion - kopiranje

2/2

esta je greka da se kopiranje vri


komandama operativnog sistema a zatim
kopirani fajlovi dodaju pod kontrolu
verzija. Ovako dodati fajlovi nee imati
istoriju kopiranih ve e biti posmatrani
kao potpuno novi fajlovi sa novom
istorijom.
Vreme trajanja kopiranja URL na URL ne
zavisi od veliine stabla koje se kopira.
Kopirani sadraj ne zauzima dodatni
prostor u repozitorijumu.

Subversion - premetanje

Operacija move vri premetanje


fajlova/direktorijuma na novu lokaciju.
Takoe se koristi i za promenu imena
fajl./dir.
Premetanje je mogue obaviti izmeu
URL-ova istog repozitorijuma ili unutar
radne kopije.

1/2

Subversion - premetanje

2/2

esta je greka da se premetanje obavi


komandama operativnog sistema. Ukoliko
to uradite subversion e fajlove na novoj
lokaciji posmatrati kao nove dok e na
staroj lokaciji prijavljivati da fajlovi
nedostaju u RK. Ukoliko se uradi update
fajlovi na staroj lokaciji bie ponovo
preuzeti iz repozitorijuma.

Subversion
refaktorisanje koda

Prilikom refaktorisanja koda u Javi esto


menjamo nazive fajlova, menjamo pakete
(pa samim tim i poloaj fajlova u
direktorijumima). Bilo bi naporno da se
ovo mora runo obavljati. Sreom, o
svemu se brine Subclipse subversion
plugin za eclipse. On e prilikom svake
operacije refaktorizacije izdati
odgovarajue move komande subversionu.

Subversion obeleavanje

1/2

Operacija obeleavanja (tag) se svodi na


kopiranje trunk-a projekta u folder tags pod
imenom simbolike oznake.
Podsea na pravljenje backup-a projekta s
tom razlikom to se moe iskopirati i bilo
koja revizija iz prolosti.
Nije neophodno da se radi jer uvek moemo
pristupiti bilo kojoj reviziji po njenoj
numerikoj oznaci ali je preporuivo jer je
pronalaenje odgovarajue milestone verzije
jednostavnije po nazivu.
Prema usvojenoj konvenciji sadraj tags
foldera ne smemo menjati (vriti commit).

Subversion - obeleavanje

2/2

Subversion grananje

1/2

Operacija obeleavanja (branching) se


svodi na kopiranje trunk-a projekta u
folder branches pod simbolike imenom
grane.
Za razliku od oznake mogue je prei
na granu i raditi izmene.
Ovo je jedini mehanizam ispravke starih
verzija projekta (bugfix starih verzija)

Subversion - grananje

2/2

Subversion prelazak na
granu

Opracija switch nam omoguava da


prevedemo radnu kopiju sa trunk URL-a
na URL odreene grane i obratno.
Ukoliko nemamo radnu kopiju moemo
uraditi direktno uraditi checkout grane.
Poeljno je da se, kada imamo radnu
kopiju, koristi komanda switch, posebno
ako se nalazimo na sporom mrenom
linku, jer se generie mnogo manje
mrenog saobraaja.

Subversion spajanje
promena sa grana

1/2

Operacija je merge.
Omoguava integraciju promena koje su
se desile izmeu dve revizije istog URL-a
ili izmeu dva URL-a u lokalnu radnu
kopiju.
Moe izazvati konflikte.

Subversion spajanje
promena sa grana

2/2

Konfigurisanje proxy servera

Konfiguracija proxy servera se nalazi u fajlu servers


u direktorijumu C:\Documents and Settings\
%USER%\Application Data\Subversion na
Windows-u odnosno ~/.subversion na linux-u.
Sadraj fajla za rad u Centru za raunarstvo FTN-a
treba da bude:

[global]
http-proxy-host = 192.168.1.100
http-proxy-port = 8080

Literatura

Ben Collins-Sussman, Brian W. Fitzpatrick,


C. Michael Pilat: Version Control with
Subversion
Priprema za vebe za Subversion iz
predmeta Upravljanja softverskim
projektom
Subversion projekat,
http://subversion.tigris.org/
Subclipse projekat,
http://subclipse.tigris.org

You might also like