80 likes | 202 Views
Projektiranje in organizacija informacijskih sistemov. Sistemi za nadzor razli čic (version control). Čemu služi sistem za nadzor različic?. Sistem shranjuje zgodovino razvoja ... česarkoli
E N D
Projektiranje in organizacija informacijskih sistemov Sistemi za nadzor različic(version control)
Čemu služi sistem za nadzor različic? • Sistem shranjuje zgodovino razvoja ... česarkoli • V praksi ga uporabljamo praktično samo v programskem inženirstvu, za shranjevanje izvorne kode, konfiguracijskih datotek... • Razvijalec mora imeti možnost potegniti iz arhiva staro različico in jo popravljati, saj ima vsaka druge hrošče • Preprosto shranjevanje (vsakodnevnih) kopij ni dobra rešitev, saj • so te kopije skoraj identične (škoda prostora!) • ta sistem zahteva disciplino (te nimamo!) • ta sistem ustvarja zmedo (ki je je tako ali tako dovolj) • Omogoča: • shranjevanje starih različic • primerjanje različic • istočasno delo več ljudi, ne da bi kdaj kdo komu povozil kodo • nadzor, kdo je spremenil kaj in kdaj • beleženje različic kode, uporabljene v posamezni različici aplikacije • preprosto javno distribucijo zadnje različice programa • preprosto avtomatsko dnevno preskušanje programa (predavanje “Dobra praksa”)
Rešitve istočasnega spreminjanja datotek • Distribuirani model: vsak ima svoj “repozitorij” • “glavni” izda kodo • kdor jo pobere ima pri sebi lokalni repozitorij različic • spremembe objavi kot “changeset” – “snapshot” kode • “glavni” lahko vključi “changeset” v “uradno” različico; ta korak je lahko zapleten • arch (GNU), TeamWare (Sun), BitKeeper (BitMover): • Zaklepanje • vse lokalne datoteke so samo za branje (read only) • dovoljenje za pisanje ima hkrati lahko le en razvijalec • Visual Source Safe (MS); ne uporablja ga niti Microsoft ;) • problemi • kaj, če bi dva razvijalca rada spreminala različne dele programa • če ima nekdo predolgo zaklenjeno datoteko, bodo drugi obupali in kršili pravila • Združevanje • vsak lokalno spreminja, kar in kadar želi • preden shrani datoteko na repozitorij, mora vanjo dodati spremembe, ki so jih medtem naredili drugi(to navadno ni težko, tipično gre kar avtomatsko) • CVS (GPL), SVN (Gnu) in večina drugih
Terminologija RepositoryMesto, kjer so shranjene datoteke; navadno na strežniku ModulV terminologiji CVS je to posamezen projekt ali zaokrožen del projekta BranchVeja(-e), v katerih vzporedno razvijamo različne verzije aplikacije in jih kasneje potencialno združimo TagOznaka več datotek; uporabno za označevanje različic ob izdaji RevisionVerzija datoteke (npr. revision 1.183 je lahko 183. verzija) ConflictNastopi, kadar sta dva razvijalca spreminjala isto datoteko (na istem mestu?) Operacije ImportUvoz datoteke (modula) v repozitorij ExportIzvoz iz repozitorija na lokalni računalnik (klienta) Check-outKot export, vendar tako, da je mogoče spremenjene datoteke ponovno “oddati” na repozitorij Update (tudi sync)Prevzemanje zadnje različice datoteke iz repozitorija MergeZdruževanje sprememb iste datoteke v novo, združeno različico Commit (tudi submit, check-in)Shranjevanje spremenjene datoteke na repozitorij (sem spada tudi brisanje datoteke) HistoryZgodovina sprememb datoteke (lahko tudi grafična, z vejami...) DiffRazlika med lokalno datoteko in ekvivalentno verzijo na repozitoriju ali med dvema poljubnima verzijama iste datoteke AnnotateIzpis avtorjev posameznih vrstic neke verzije
Nekateri sistemi:CVS (Concurrent Versions System) • najpopularnejši (počasi ga izrinja SVN, subversion) • razvil ga je Dick Grune, da bi Erik Baalbergen in Maarten Waage, ki sta imela različne delovne navade glede urnika, lahko sodelovala pri razvoju prevajalnika za C • CVSNT, verzija za Windows, je imela toliko koristnih dodatkov, da so jih prenesli nazaj na Unix • dostop je lahko tudi samo read-only (za “nečlane”) • omogoča veje (branch) in oznake (tag) • “delta compression”: namesto celih datotek shranjuje spremembe • diff je samo zbirka zabeleženih sprememb • merge uveljavi spremembe med verzijama • proženje dogodkov (“eventov”) na strežniku • omejitve • ni preimenovanja datotek (moramo jih zbrisati in jih dodati z novim imenom) • direktorijev ni mogoče prenašati ali preimenovati (isti trik) • omejena podpora za datoteke z imeni v Unicodeu • delta-compression ne deluje za binarne datoteke
Nekateri sistemi:CVS (Concurrent Versions System): klienti • cvs • ukazna vrstica; prek tega delujejo vsi drugi klienti) • cvs –d :sspi:cvs@estelle.fri.uni-lj.si:/CVS –Q update –r stable -f • izgleda strašljivo, a ni • omogoča klicanje iz skript • WinCVS • GUI – preprostejši, anekoliko okoren • TortoiseCVS • integracija z Explorerjemoz. Total Commanderjem • program meseca naSourceForgeu WinCVS
Nekateri sistemi:SVN (Subversion) • Namen SVN je odpraviti pomanjkljivosti CVS; SVN naj bi zamenjal CVS (kot je ta zamenjal RCS) • Precej razvijalcev, ki so razvijali na CVS, zdaj dela na SVN • Podoben CVS, nekateri klienti (Tortoise) so za CVS samo “prepisani” v različice za SVN • Zanimivost: projekt je plačan s strani CollabNeta, ki je lastnik kode, vendar je ta pod licenco, ki je zelo podobna GPL • Prednosti pred CVS: • “Atomic Commit”: če commit ne uspe popolnoma, ne uspe • Preimenovanje datotek, premikanje in preimenovanje direktorijev • Izboljšana (učinkovitejša) tag in branch • Delta-kompresija binarnih datotek • Projektov, ki uporabljajo CVS (še) nima smisla prestavljati (niti avtorji ne priporočajo migracije), za nove projekte pa ni razloga proti SVN
Literatura • Wikipedia: • http://en.wikipedia.org/wiki/Version_control • http://en.wikipedia.org/wiki/Concurrent_Versions_System • http://en.wikipedia.org/wiki/Subversion_%28software%29 • Domače strani CVS in SVN