Zašto vam je potreban sustav kontrole verzija? Što su sustavi za kontrolu verzija i zašto su vam potrebni? Takvi sustavi, kao što su CVS, Subversion i Perforce, imaju središnji poslužitelj koji pohranjuje sve datoteke pod kontrolom verzija i niz klijenata koji

Pozdrav, Habr. Odlučio sam se dotaknuti teme koja je iscrpljena u mnogim člancima, točnije, opisati uglavnom nestandardnu ​​(rekao bih, nerazvrstanu) upotrebu sustava za kontrolu verzija (u daljnjem tekstu VCS). Kolege programeri, sakrijmo trule rajčice i idemo dalje, jer ovaj članak nije za vas. Da, svi ste već naučili sve zamršenosti Gita, SVN-a, CVS-a i znate mnoge druge poštapalice. Upoznajmo se i mi, obični smrtnici, sa svim prednostima korištenja čvrste valute.
Pozivam sve koji se žele upoznati sa sustavom čvrste valute, kao i sve one koji na ovaj ili onaj način imaju posla s podacima koji se brzo mijenjaju.

Zašto je to potrebno?

I sam sam student tehničkog sveučilišta i gotovo stalno radim s dokumentima (tekstovima, crtežima, crtežima), mijenjajući ih tri (deset, sto) puta dnevno. Ponekad se ispostavi da izmjene napravljene tijekom prošli tjedan, potrebno je poništiti i vratiti dokumente u stanje od prije tjedan dana. Dobro je ako je napravljeno samo nekoliko izmjena, u ovom slučaju pedesetak pogodaka na Ctrl+Z može pomoći. Međutim, ako je tijekom ovog tjedna bilo više ili manje aktivnog rada s dokumentom, neće biti moguće jednostavno vratiti status "prije važnog uređivanja napravljenog prije tjedan dana." Da biste to učinili, potrebna vam je kopija dokumenta u vrijeme "prije važnog uređivanja", kao i još desetak kopija "prije drugog važnog uređivanja", "prije upitnog uređivanja" i "prije uređivanja koje će najviše vjerojatno treba poništiti.” U principu, ovaj pristup je moguć i mnogi ga prakticiraju. Donedavno sam i sam držao važne verzije datoteke, spremajući ih s prefiksom "datum_vrijeme" i, činilo se, bio sam zadovoljan. Prednost ove metode je njezina jednostavnost, nedostatak je što radne mape "bubre" i nezgodne su za korištenje. I, ako se prvi od njih može nekako riješiti (veliki tvrdi diskovi i 7zip), onda je trebalo nešto učiniti s neugodnošću.

Što se može učiniti po tom pitanju, odnosno što je SLE

Uzmimo odlomak iz Wikipedije: „Sustav kontrole verzija (od engleskog Version Control System, VCS ili Revision Control System) je softver koji olakšava rad s promjenjivim informacijama. Sustav kontrole verzija omogućuje pohranjivanje više verzija istog dokumenta i, ako je potrebno, povratak na više ranije verzije, odrediti tko je i kada napravio ovu ili onu promjenu i još mnogo toga.” To je slično načinu na koji sama Wikipedija funkcionira - sve verzije članaka sa svim izmjenama dostupne su za proučavanje.
Dakle, korištenje VCS-a u situaciji kada trebate pohraniti mnogo verzija datoteka je ono što trebate. Prednosti ovog pristupa uključuju jednostavnost korištenja i spremanje besplatnih prostor na disku zahvaljujući tzv. delta kompresiji (kada se same datoteke ne spremaju u različitim verzijama, već se mijenjaju od verzije do verzije, što smanjuje količinu pohranjenih podataka). Pokušajmo.

Koje vrste čvrste valute postoje?

Ista Wikipedia sugerira da se valuta čvrste valute može centralizirati i distribuirati, velika i mala, sa ili bez zvona i zviždaljki. Ovo nas posebno ne zanima, jer ćemo koristiti (by barem, prvo) samo dio funkcionalnosti mjenjačkog sustava. Razmotrimo upravo ovu funkcionalnost.
Gotovo svi VCS-ovi su neka vrsta pohrane u kojoj su pohranjene sve verzije datoteka s kojima radimo. Ovdje je potrebno pojasniti da verzije pohranjenih datoteka najčešće određuje sam korisnik. Napravili smo, recimo, desetak malih izmjena i odlučili da je vrijeme da rezultate naših aktivnosti spremimo u repozitorij. Na pamet pada analogija s povremenim pritiskom na Ctrl+S, s jedinom razlikom što se ovoj verziji datoteke može pristupiti u budućnosti. Naravno, jednim potezom možete dodati verzije koliko god datoteka želite u repozitorij. Ova radnja se na jednostavan način naziva "commit" ili "commit promjene".
U bilo kojem trenutku možete dodati ili izbrisati novi u repozitorij (tako se repozitorij pametno zove). postojeću datoteku, a VCS će "zapamtiti" kada i što smo dodali/izbrisali. A zahvaljujući komentarima tijekom predaje, također možete opisati zašto se izvodi ova konkretna obveza ("tamo je dodana sitnica"/"uklonjena možda neophodan dio odande").
Kada konačno shvatimo da je vrijeme da se vratimo na verziju od prije tjedan dana, imamo cijelu povijest promjena. I ovdje možemo birati što ćemo raditi. Ako trebate kopirati traženi dio iz stare datoteke i zalijepiti ga u trenutnu verziju, jednostavno uklonite staru datoteku iz pohrane i kopirajte ono što vam je potrebno iz nje. Ako se trebate potpuno vratiti i nastaviti raditi s stara verzija Ponovno nam u pomoć priskače SKB - možete se vratiti na raniju verziju i napraviti tzv. novu granu ("granu"), a zadržati sve ono čega smo se "odrekli" vraćanjem verzija prije tjedan dana. Tako se povijest verzija projekta može grafički prikazati kao stablo - od “korijena” (početak projekta) do “grana” (uspješne i neuspješne izmjene). Osim toga, “granu” možemo stvoriti i umjetno, na primjer, u slučaju kada odlučimo razviti dvije iz iste izvorne datoteke različite verzije– u prvom radimo neke kuglice, u drugom druge. Štoviše, ako su radne datoteke tekstualni dokumenti(i u nekim drugim), moguće je kombinirati različite grane u jednu - tzv. merge. Zamislimo sada da nekoliko ljudi radi na projektu i da svatko radi na svojoj "vruljici". Posjedovanje zajedničkog repozitorija u ovom slučaju uvelike pojednostavljuje razvoj.

Od teorije do prakse, ili početak korištenja SLE

Dakle, nadam se da sam vas uvjerio da je korištenje SLE dobra stvar. Ostaje samo naučiti koristiti VCS. To je ono što ćemo učiniti.
Postoje različiti sustavi kontrole verzija koji se međusobno razlikuju razne aspekte koristiti. Budući da nas (barem u početku) ne zanimaju suptilnosti rada raznih sustava, usredotočimo se na najjednostavniji i najprijateljskiji od njih. Po mom skromnom mišljenju, takav je sustav, koliko je čudno, Mercurial - "višeplatformski distribuirani sustav kontrole verzija dizajniran za učinkovit rad s vrlo velikim spremištima koda" s TortoiseHg grafičkom ljuskom. Sustav se može koristiti pod Windows, Linux i Mac OS X.
Dopustite mi da odmah rezerviram da ću opisati rad sa sustavom u sustavu Windows. Za one koji su svladali Linux, neće biti teško naučiti sve po analogiji.
Osim toga, u isto vrijeme ćemo naučiti raditi sa besplatni hosting Mercurial repozitoriji - bitbucket.org, nužni ako na projektu ne radite sami ili, što je vrlo zgodno, želite imati pristup svim verzijama projekta putem interneta. U biti, to je zgodna zamjena za dropbox ako ste ga prije koristili.
Prvo instalirajte Mercurial + TortoiseHg odavde: tortoisehg.bitbucket.org.
Ovaj sustav radi u konzoli, pa ćemo zbog lakšeg korištenja napisati nekoliko *. bat datoteka ov za tipične operacije.
Sve operacije izvode se naredbom hg. Pozvan bez parametara, prikazuje popis osnovnih naredbi.
Repozitorij je bilo koji direktorij koji odaberemo (ja ću koristiti mapu “C:\project\”), u koji bi trebale biti pohranjene sve datoteke našeg budućeg projekta. Naravno, nitko ne zabranjuje imati nekoliko repozitorija na jednom računalu.
Da bi sustav "razumio" da želimo stvoriti repozitorij, pokrećemo naredbu:
hg init c:\projekt
nakon čega će se kreirati mapa “c:\project\”, ako prethodno nije kreirana, te mapa “c:\project\.hg\” u koju će Mercurial pohraniti sve servisne informacije.
Odmah se sjetimo da želimo dobiti ne samo lokalni repozitorij na našem računalu, već i udaljeni repozitorij u koji ćemo slati sve svoje promjene (ili, kako pametnjakovići kažu, “gurati” promjene u udaljeni repozitorij, iz engleski “push”). Da biste to učinili, idite na bitbucket.org, registrirajte se i kreirajte svoje prvo spremište (Repozitoriji - Stvorite novo spremište). Dajte ime spremištu (nazvat ću ga remote_project da budem konkretan) i kliknite na Create repository.
Sada imamo dva repozitorija - lokalno, koje se nalazi u mapi “c:\project\” i udaljeno, koje se nalazi na “bitbucket.org/your_account_name/remote_project/”, gdje je your_account_name ime navedeno prilikom registracije na bitbucket, remote_project je naziv repozitorija, odabran prilikom kreiranja.
Kako bismo nastavili s istraživanjem, moramo gurnuti nešto u naš lokalni repozitorij. Samo stvorite u njemu (u mom slučaju, u mapi “c:\project\”) bilo koju datoteku vašeg budućeg projekta ili tamo kopirajte svoj trenutni projekt.
Sada, strogo govoreći, trebamo reći Mercurialu: "dodali smo te i te datoteke i nekoliko novih mapa u mapu projekta", za to postoji naredba "hg add". Međutim, drugi je pristup prikladniji - kod sljedećeg urezivanja reći ćemo Mercurialu da pokupi sve novostvorene datoteke iz mape projekta i zaboravi izbrisane, ovo je puno lakše nego raditi “hg add c:\project\new_document .doc” svaki put kada izradite novi dokument "
Dakle, prijeđimo na naš prvi commit. Izvršava se sljedećom naredbom:
hg commit –A –m “komentar za commit”
Pogledajmo sve redom. Naredba se mora unijeti kada smo u repozitoriju (odnosno, prvo moramo izvršiti “cd c:\project”). Opcija “-A” neophodna je kako bi Mercurial “pokupio” novostvorene datoteke (pogledajte gore), opcija “-m” omogućuje vam dodavanje komentara u commit. Ovi komentari će biti prikazani prilikom gledanja verzija (ili skupova promjena - popisa promjena) u TortoiseHg i na stranici projekta na bitbucket.org. Vrlo je važno dati smislene komentare kako kasnije ne biste patili, sjećajući se kada je napravljeno ovo ili ono uređivanje.
Sada naš repozitorij pohranjuje početnu verziju našeg projekta. Sve daljnje komitacije izvode se na isti način nakon što odlučimo da je vrijeme za spremanje trenutne verzije.
Dovršeni commit može se "gurnuti" u udaljeni repozitorij naredbom:
hg push https://bitbucket.org/your_account_name/remote_project
U tom slučaju također morate biti u mapi koja odgovara repozitoriju. Nakon unosa naredbe, od vas će se tražiti ime i lozinka našeg računa na bitbucket.org, kako ih ne biste unosili svakim pritiskom, naredba se može zamijeniti sljedećom:
hg push hg push https://your_account_name:[email protected]/your_account_name/remote_project
Budući da ćemo sve naredbe pisati u *.bat datoteku, u ovom slučaju lozinka će biti pohranjena u otvorena forma, što je mali sigurnosni rizik, ali mi je prihvatljivo.
Stoga, radi praktičnosti, stvaramo datoteke commit.bat, push.bat i commit&push.bat u području izravnog dohvata sa sljedećim sadržajem:
[sadržaj datoteke commit.bat]
AKO !%1==! idi na izlaz1
cd C:\projekt
hg commit -A -m "%*"
idi na izlaz0
:izlaz1
echo "NEMA ARG-a NAREDBENOG RETA!"
:izlaz0
Ova datoteka, pozvana s argumentima, predat će projekt s argumentima uključenim u komentare predaje. Primjer: izvršite “commit.bat moj prvi commit” i dobijete commit s komentarom “my first commit”. U FAR-u je za to zgodno koristiti kombinaciju Ctrl+Enter.
[sadržaj datoteke push.bat]
cd C:\projekt
hg push https://your_account_name:[email protected]/your_account_name/remote_project
Ova datoteka će se gurnuti u udaljeno spremište.
[sadržaj datoteke commit&push.bat]
AKO !%1==! idi na izlaz1
cd C:\projekt
hg commit -A -m "%*"
idi na izlaz0
:izlaz1
echo "NEMA ARG-a NAREDBENOG RETA!"
:izlaz0
poziv ./push.bat
Ova datoteka, pozvana s argumentima, izvršit će sekvencijalno commit i push projekta s argumentima unesenim u komentarima na commit.
Osim toga, za male srednje predaje, preporučujem stvaranje datoteke commit_date_time.bat:
[sadržaj datoteke commit_date_time.bat]
cd C:\projekt
hg commit -A -m "%DATUM% %TIME%"
Ova datoteka će se predati s trenutnim datumom i vremenom kao komentarom, što je često zgodno.
Svatko pojedinačno odlučuje o učestalosti commit-a i push-ova, ovisno o intenzitetu i složenosti uređivanja. Iako se preporuča slijediti pravilo "češće je bolje".
Desnim klikom na datoteku/mapu spremišta, možete pokrenuti Istraživač spremišta (TortoiseHg - Istraživač spremišta), koji predstavlja sva naša predavanja s komentarima na njih. Ovaj prozor prikazuje strukturu stabla našeg repozitorija, odavde možete izvoditi predaje, guranja, vraćanja na prethodne verzije (povratak) i druge operacije.
Na bitbucket.org/your_account_name/remote_project postoji sličan skup skupova promjena, a možete preuzeti bilo koju verziju projekta u jednoj arhivi, što je ponekad također vrlo zgodno.
Općenito, smatram da je ovo kraj mog početnog poznanstva s Mercurialom. Za više detaljne informacije može se pristupiti na: translated.by/you/mercurial-the-definitive-guide/into-ru/trans/

Za koga je ovaj članak?

Vjerojatno ću završiti s onim s čim sam trebao započeti – za koga je ovaj članak? Odgovor je jednostavan - za one koji žele naučiti koristiti čvrstu valutu. Uspio sam navući nekoliko dizajnera, inženjera, pa čak i pisca na VCS. Pokušajte i vi - ovo će vam vjerojatno znatno olakšati posao.

P.S. Premješteno na blog "Sustavi kontrole verzija".

Oznake: Dodajte oznake

Sustav kontrole verzija ( Sustav kontrole verzija, VCS) je softver koji vam omogućuje praćenje promjena u dokumentima, njihovo vraćanje unatrag ako je potrebno, utvrđivanje tko je napravio ispravke i kada, itd. U članku se govori o vrstama VCS, principe njihovog rada, kao i primjere softverski proizvodi.

Što je sustav kontrole verzija?

Vjerojatno je svatko upoznat sa situacijom kada, kada radite na projektu, postoji potreba za izmjenama, ali u isto vrijeme morate spremiti funkcionalnu verziju, u ovom slučaju, u pravilu, stvara se nova mapa, čiji će naziv najvjerojatnije biti “Nova mapa” uz dodatak datuma ili male bilješke, kopira se u radna verzija projekt i na njemu se već radi. S vremenom se broj takvih mapa može značajno povećati, što stvara poteškoće pri vraćanju na prethodne verzije, praćenju promjena itd. Ova situacija postaje mnogo gora kada na projektu radi više ljudi.

Za rješavanje takvih problema koristi se sustav kontrole verzija; on vam omogućuje udoban rad na projektu i pojedinačno i u timu. VCS prati promjene u datotekama, pruža mogućnosti za stvaranje novih i spajanje postojećih grana projekta, kontrolira korisnički pristup projektu, omogućuje vraćanje ispravaka i utvrđivanje tko je, kada i koje promjene napravio u projektu. Glavni koncept VCS je spremište ( spremište) – posebna pohrana projektnih datoteka i mapa u kojima se prate promjene. Programer ima na raspolaganju takozvanu "radnu kopiju" ( radna kopija) projekta s kojim izravno radi. Radna kopija mora biti povremeno sinkronizirana sa spremištem; ova operacija uključuje slanje promjena koje je korisnik napravio na svojoj radnoj kopiji (ova operacija se zove počiniti) i ažuriranje radne kopije, pri čemu se najnovija verzija iz repozitorija preuzima korisniku (ovaj proces se zove Ažuriraj).

Centralizirani i distribuirani sustavi kontrole verzija

Sustavi kontrole verzija mogu se podijeliti u dvije skupine: distribuirani i centralizirani.

Centralizirani sustavi kontrole verzija

CentraliziranoSustavi kontrole verzija su aplikacije klijent-poslužitelj, gdje repozitorij projekta postoji u jednoj kopiji i pohranjuje se na poslužitelju. Pristupalo mu se putem posebne klijentske aplikacije.Primjeri takvih softverskih proizvoda uključuju: CVS, Subverzija.

CVS (Sustav istodobnih verzija, Sustav simultanih verzija) jedan je od prvih sustava koji je postao široko rasprostranjen među programerima; nastao je kasnih 80-ih godina prošlog stoljeća. Trenutno se ovaj proizvod ne razvija, prvenstveno zbog brojnih ključnih nedostataka, poput nemogućnosti preimenovanja datoteka, neučinkovite pohrane, praktički potpuna odsutnost kontrola integriteta.

Subverzija (SVN) – sustav kontrole verzija stvoren da zamijeni CVS. SVN je razvijen 2004. godine i koristi se i danas. Unatoč mnogim prednostima u odnosu na CVS na SVN Ipak, postoje nedostaci, kao što su problemi s preimenovanjem, nemogućnost brisanja podataka iz repozitorija, problemi u radu spajanja grana itd. općenito SVN bio (i ostao) značajan korak naprijed u odnosu na CVS.

Distribuirani sustavi kontrole verzija

Distribuirani sustavi kontrole verzija ( Distribuirani sustav kontrole verzija, DVCS) omogućuju pohranjivanje repozitorija (njegovu kopiju) za svakog programera koji radi s ovim sustavom. U tom slučaju možete odabrati središnje spremište (uvjetno) u koje će se slati promjene iz lokalnih i s njim će se ta lokalna spremišta sinkronizirati. Kada rade s takvim sustavom, korisnici povremeno sinkroniziraju svoja lokalna spremišta sa središnjim i rade izravno sa svojom lokalnom kopijom. Nakon što napravite dovoljno promjena na lokalnoj kopiji, one (promjene) se šalju na poslužitelj. U ovom slučaju, poslužitelj se najčešće odabire uvjetno, jer u većini DVCS ne postoji nešto poput "namjenskog poslužitelja sa središnjim spremištem".

Velika prednost ovog pristupa je autonomija programera u radu na projektu, fleksibilnost zajednički sustav i povećanu pouzdanost osiguravajući da svaki programer ima lokalnu kopiju središnjeg repozitorija. Dva najpoznatija DVCS- Ovo Git I Mercurial.

Počnimo s Mercurial, ovaj sustav je besplatan DVCS, koji je izgrađen na takav način da ne postoji koncept središnjeg repozitorija za rad s njim VCS koristi se (obično) uslužni program konzole hg. Mercurial ima sve mogućnosti sustava za kontrolu verzija, poput grananja, spajanja, sinkronizacije s drugim repozitorijima. Ovaj projekt korištenje i podrška veliki broj glavni programeri, među njima Mozilla, Otvoreni ured, OpenJDK i mnogi drugi. Sam proizvod je napisan u Piton i dostupan je na većini modernih operativni sustavi (Windows, MacOS, Linux), postoji i značajan broj pomoćnih programa sa grafičko sučelje raditi s Mercurial. Glavni konkurent Mercurial na tržištu distribuiranih sustava kontrole verzija je Git, koji je do danas pobijedio u utrci za vodstvo.

Git– distribuirani sustav kontrole verzija koji je razvio Linus Torvalds za rad na jezgri operacijskog sustava Linux. Među glavni projekti, unutar kojih se koristi git, možemo odabrati jezgru Linux, Qt, Android. Git besplatan i distribuiran pod licencom GNU GPL 2 i, kao i Mercurial, dostupan na gotovo svim operativnim sustavima. Prema vlastitom osnovne sposobnosti git slično Mercurial(i drugi DVCS), ali zahvaljujući nizu prednosti ( velika brzina rad, sposobnost integracije s drugima VCS, korisničko sučelje) i vrlo aktivna zajednica koja se formirala oko ovog sustava, git postao tržišni lider u distribuiranim sustavima kontrole verzija.Treba napomenuti da unatoč velikoj popularnosti takvih sustava kao što su git, velike korporacije poput Google, koristite njihove VCS.

Ovo je bilo uvodno predavanje o sustavima kontrole verzija. U nastavku će se sve prezentacije odnositi samo na git.

Ako vam je draže učite iz video predavanja, onda preporučujemo odličan tečaj na git iz GeekBrains , ići veza a tečaj pronađite u odjeljku “Tečajevi”. Git. Brzi početak". On besplatno, samo se trebate registrirati na stranici. Preporučujemo da pobliže pogledate ovaj resurs; na njemu ima još mnogo zanimljivih stvari!

Imate li sjajnu novu poslovnu ideju vezanu uz razvoj softvera?Trebate li razviti tehnološki složeno rješenje? Ili imate veliki tim programera koji rade na istom zadatku? Zatim zapamtite ove tri riječi:sustav kontrole verzija .

Sustav kontrole verzija (cvs), 2017. - Usporedi: Git, SVN, Mercurial

, ili vcs- to je ono što sprječava da se projekt raspadne kada na njemu radi puno ljudi. Programeri, menadžeri, copywriteri mogu raditi svatko na svom djelu bez ometanja jedni drugih i bez nanošenja štete koja se ne može ispraviti.

Ako još niste upoznati s konceptomsustavi kontrole verzija, zatim ovdje sve je vrlo jasno prikazano.

Ili pogledajte video s GitHuba.

Koji je sustav kontrole verzija pravi za vaš projekt?

Usporedili smo nekoliko popularnih rješenja kako bismo vam olakšali odabir.

Ovo je visoko specijalizirana tehnička tema. Potrudili smo se da naša recenzija bude razumljiva svima. Ali ako nemate iskustva u programiranju, svakako se posavjetujte sa svojim razvojnim odjelom prije donošenja odluke.

Sustavi kontrole verzija, uključujući dobro poznati SVN (Subversion) i Git, izvorno su stvoreni kako bi razvojnim timovima omogućili rad na zajednički projekti bez stvaranja zabune. U sustavu upravljanja ne morate samostalno pratiti grane koda i proučavati bilješke uz njih. Umjesto toga koristi se središnje spremište u kojem je sve organizirano i strukturirano. Praktično je ažurirati datoteke, dodavati komentare, pa čak i spajati grane projekta.

Mišljenja o čemusustav kontrole verzijanajbolji, uvelike variraju, a to dovodi do žestoka rasprava među programerima. Odabir i proučavanjesustavi kontrole verzijaza svoj projekt, zapamtite da su prednosti određenog rješenja često subjektivne. Na primjer, osobne preferencije programera ili, recimo, pokazatelji kao što su performanse, mogućnosti IDE dodataka itd.

Glavna razlika između sustava kontrole verzija je jesu li klijent-poslužitelj ili decentralizirani (p2p). Imaju li središnje spremište (poslužitelj) odakle kod dolazi i u koji se vraća? napravljene promjene. Ili je to kopija u lokalnoj pohrani, ažurirana preko ravnopravnih uređaja: više decentralizirana mreža, koji se koristi za sinkronizaciju, razmjenu zakrpa (setova promjena) i za održavanje trenutnog koda.

Također je vrijedno uzeti u obzir brzinu, funkcionalnost i prag za ulazak/savladavanje specifičnogsustavi upravljanja. Pogledajmo najčešćesustavi kontrole verzijai razloge zašto programeri preferiraju određena rješenja.

Sustav simultane verzije (CVS)

CVS pojavio se 1980-ih i još uvijek je popularan među razvijačima komercijalnih proizvoda i programerima otvorenog koda.

CVS distribuirati pod uvjetimaGNU Open License Agreement i omogućuje vam preuzimanje s poslužitelja potrebnu verziju projekt - "odjava" (izvadak) , a zatim ga poslati natrag na poslužitelj, "prijava" (povratak),s učinjenim promjenama.

Izvorno CVS je stvoren kako bi se izbjegli sukobi verzija. Svi su sudionici dobili samo najnoviju verziju koda za rad. Ovo je bio prvi sustav kontrole verzija. Korisnik je trebao brzo unijeti promjene u repozitorij prije nego što ga drugi u tome prestignu.

Sada CVS ima podršku za rad na projektima s granama koda. To rezultira s nekoliko opcija proizvoda različite karakteristike, koji se kasnije mogu kombinirati.

CVS poslužitelji obično rade pod Unixom, ali CVS - klijenti su također dostupni u drugim popularnim operativnim sustavima. CVS - “zreo”, vremenski testiransustav kontrole verzija. To je još uvijek sustav otvorenog koda, ali danas se nove značajke dodaju vrlo rijetko.

Ujedno, CVSNT je verzija izdvojena u zaseban projekt CVS Za Windows poslužitelji, - sada prilično aktivno proširuje svoju funkcionalnost.

Prednosti:

  • Vremenski testirana tehnologija koja je na tržištu već desetljećima.

Mane:

  • Preimenovanje ili premještanje datoteka ne odražava se u povijesti
  • Sigurnosni rizici povezani sa simboličkim vezama na datoteke
  • Nema podrške za atomske operacije, što može dovesti do oštećenja koda
  • Poslovanje s podružnicama programski kod skupo, kao ovokontrolni sustavnije namijenjen za dugoročne projekte s granama koda

Apache Subversion (SVN)

SVN nastao je kao alternativa CVS kako bi se ispravili nedostaci CVS a istovremeno osigurati visoku kompatibilnost s njim.

Kao CVS SVN je besplatan sustav kontrola verzija otvoreni izvor. Jedina razlika je u tome što se distribuira pod Apache licencom, a ne podOtvoren licencni ugovor GNU.

Za održavanje integriteta baze podataka, SVN koristi takozvane atomske operacije. Kada se izda nova verzija, svi popravci ili niti jedan od njih se ne primjenjuju na konačni proizvod. Na taj način kod je zaštićen od kaotičnih djelomičnih izmjena koje nisu u skladu jedna s drugom i uzrokuju pogreške.

Mnogi programeri su se prebacili naSVN jer nova tehnologija naslijedio bolje prilike CVS a ujedno ih i proširio.

Dok sam bio u CVS-u operacije s granama koda su skupe i nisu predviđene arhitekturom sustava; SVN je stvoren samo za to. To jest, za veće projekte s grananjem koda i mnogim područjima razvoja.

Spomenuti su nedostaci SVN usporedno mala brzina i manjak raspodijeljena kontrola verzije. Distribuirano kontrola verzija koristi peer-to-peer model umjesto centraliziranog poslužitelja za pohranu ažuriranja softverskog koda. I iako peer-to-peer model radi bolje u projektima otvorenog koda, nije idealan u drugim slučajevima. Nedostatak pristupa na strani poslužitelja je da kada se poslužitelj sruši, klijenti nemaju pristup kodu.

Prednosti:

  • Temeljeno na sustavu CVS
  • Omogućuje atomske operacije
  • Operacije grananja koda su jeftinije
  • Širok izbor IDE dodataka
  • Ne koristi peer-to-peer model

Mane:

  • Pogreške i dalje postoje vezane uz preimenovanje datoteka i direktorija
  • Nezadovoljavajući skup naredbi za rad s repozitorijem
  • Relativno mala brzina

Git

Ovaj sustav je stvoren za upravljanje razvojem Linux kerneli i koristi pristup koji je potpuno drugačiji od CVS i SVN.

Osnova Git postavljeni su koncepti za stvaranje bržeg distribuiranjasustav kontrole verzija, za razliku od pravila i rješenja koja se koriste u CVS . Budući da je Git prvenstveno razvijen za Linux, radi najbrže na ovom OS-u.

Git također radi na sustavima sličnim Unixu (poput MacOS-a) i na njima se može izvoditi Windows platforma Koristi se paket mSysGit.

Programski kod možda neće biti dostupan kada koristite računalo bez repozitorija. Postoje zaobilazna rješenja za ovaj problem, a neki programeri vjeruju da je Gitova brzina poštena cijena koju treba platiti za neugodnosti.

Git također ima mnogo alata za navigaciju vaše povijesti promjena. Svaka radna kopija izvornog koda sadrži cjelokupnu povijest razvoja, što je izuzetno korisno pri programiranju bez internetske veze.

Prednosti:

  • Super za one koji mrze CVS/SVN
  • Značajno povećanje performansi
  • Jeftine operacije s granama koda
  • Potpuna povijest razvoja dostupna izvan mreže
  • Distribuirani, peer-to-peer model

Mane:

  • Visoka prepreka za ulazak (učenje) za one koji su prethodno koristili SVN
  • ograničeno Windows podrška(u usporedbi s Linuxom)

Mercurial

Mercurial objavljen je u isto vrijeme kad i Git. to je isto distribuiran sustav kontrole verzija.

Mercurial je stvoren kao alternativa Gitu za razvoj modula jezgre Linuxa. Ali budući da smo odabrali Git, Mercurial se manje koristi. Međutim, mnogi vodeći programeri rade s ovim sustavom, na primjerOpenOffice.org .

Mercurialov sustav kontrole verzija razlikuje se od ostalihsustavi kontrole verzijajer je uglavnom napisan u Pythonu (ne C). Međutim, neki su dijelovi implementirani kao moduli proširenja u C-u.

Budući da je sustav decentraliziran i napisan u Pythonu, mnogi Python programeri skloni su prijeći na Mercurial.

Korisnici primjećuju da Mercurial zadržava neke karakteristike SVN-a, dok je distribuirani sustav, a zbog te sličnosti, ima nižu prepreku za ulazak za one koji su već upoznati sa SVN. Mercurialova dokumentacija je također potpunija, što vam pomaže da se brže naviknete na razlike.

Jedan od značajne nedostatke Mercurial je to što, za razliku od Gita, ne može spojiti dvije nadređene grane, budući da Mercurial koristi sustav dodataka, a ne podršku za skripte. Ovo je sjajno za neke programere, ali mnogi se ne žele odreći moći Gita.

Prednosti:

  • Lakše za naučiti u usporedbi s Gitom
  • Detaljna dokumentacija
  • Distribuirani modelsustavi kontrole verzija

Mane:

  • Ne postoji mogućnost spajanja dviju nadređenih grana
  • Korištenje dodataka umjesto skripti
  • Manje mogućnosti za nestandardna rješenja

Kojikontrola verzija radi za mene?

U većini slučajeva programeri koriste CVS jer im je to poznatije. Ako tim već radi na projektu, onda postoji mogućnost da se sav razvoj prenese na drugogkontrolni sustavnekako nije inspirativno. Da su morali promijeniti sustav, onda bi najvjerojatnije prešli na SVN.

CVS je već dosegao status "zrele tehnologije", što znači da se u njemu više neće pojavljivati ​​radikalno nove značajke i rješenja. Zamah navike se gubi kako ljudi prelaze na SVN. To znači da CVS postupno postaje stvar prošlosti.

Danas SVN drži prednost među poslužiteljskim poslužiteljimasustavi kontrole verzija. Uključuje pogodnosti CVS i nadmašuje ih. Ako govorimo o prevalenciji, tada ćete se najvjerojatnije susresti češće CVS ili SVN nego s Gitom ili Mercurialom. Dakle, poznavanje jedne poslužiteljske tehnologije, iako nije nužno, olakšat će vam prijelaz.

Zbog široke upotrebe i zrelosti tehnologije, SVN se nakupio velika baza znanja, što korisnicima olakšava dobivanje pomoći.

Git je očito brži od svojih konkurenata. Za projekte koji su stvoreni za distribuiranesustavi kontrole verzija, ovo je očito poboljšanje.

Značajan nedostatak Gita je to što je ponekad teško objasniti nijanse njegovog rada.sustavi upravljanja, a to usporava tijek rada dok se programeri naviknu na to. Međutim, kada se prijeđe "prag ulaska", produktivnost se povećava, a pogodnost upravljanja ograncima koda u potpunosti će nadoknaditi utrošeno vrijeme.

Za one koji mrze Git (i ima svoje protivnike među programerima), Mercurial je kompromis između SVN-a i Gita. Ovaj sustav se koristi u mnogim poznatim projektima i također ima dobru dokumentaciju.

Verzija Gita kompatibilna sa sustavom Windows također napreduje prema brzini verzije za Linux, tako da vam može biti relevantna čak i ako ne razvijate na Linuxu.

Da biste razumjeli koji je najbolji za vas, uzmite u obzir karakteristike projekta i svog tima. Razgovarajte s programerima!

Ako projekt zahtijeva jedno stablo izvornog koda na kojem će raditi mala grupa programera, onda je SVN vaša opcija. Pouzdan je i dizajniran upravo za takve slučajeve.

Ako pokrećete projekt otvorenog koda na kojem drugačije vrijeme nekoliko programera će raditi ili, ako se očekuje stalno ažuriranje kod, zatim odaberite Git. Brzina i upravljanje izvornim stablom su puno bolji ovdje nego u SVN-u.

Ako ste na raskrižju ili vam se jednostavno ne sviđa način na koji SVN ili Git rade, onda je Mercurial za vas.

Svi ovi sustavi su potpuno funkcionalni. I također besplatno. Koriste se za stvaranje softver, web stranice pa čak i operativni sustavi koje koristite i s kojima ste upoznati.

Prije svega, odlučite je li jedno ili drugo prikladnokontrolni sustavverzije za vaše poslovanje, a zatim - jednako važno - pobrinite se da ovaj izbor neće razbjesniti programere.

Početak rada sa SVN

Ako nikada niste radili sa SVN ili Gitom i nemate pojma kako započeti, ondahosting rješenje u kombinaciji s GUIpomoći će vam da se brzo naviknete.

Kao i u većini slučajeva, najvažnije je početi raditi, a onda će doći i razumijevanje. Upravljanje sustavom kontrole verzija vrlo je slično radu s datotekama na poslužitelju pomoću FTP klijenta.

BILJEŠKA:Postoje mnoga rješenja za hostingsustavi kontrole verzija, uključujući besplatno probni rok. Na temelju njih možete stvoriti svoje prvo spremište (mjesto za suradnja s kodnim datotekama) potpuno besplatno. Evo nekih od ovih usluga:

SVN & GIT hosting

Stvaranje prvog repozitorija

Nakon što ste kreirali račun, potrebno je napraviti repozitorij – za svaku platformu posebno. Obično to izgleda ovako:

  • Prijavite se na svoj račun, kliknite na svoje projekte.
  • Izrada projekta:
  • U retku "Stvori novi projekt" unesite naziv svog projekta
  • Kliknite na gumb "Stvori projekt".
  • SVN veza:
  • Nakon izrade projekta odaberite karticu "Kontrola izvora" (verzije izvornog koda)
  • Kliknite na poveznicu "Omogući kontrolu izvora"
  • Dodijelite ime spremištu
  • Kliknite "Spremi"

Grafički klijenti SVN i GIT

Dakle, spremište je stvoreno. Sada nam je potrebno da sve bude prikazano u njemu jednostavno i jasno. Da biste to učinili, trebat će vam GUI.

prikladan program raditi ssustavi kontrole verzijana Microsoft Windows i možda najbolji Apache Subversion klijent dostupan. TortoiseSVN je implementiran kao proširenje Windows ljuska, što olakšava integraciju u preglednik. To je također program otvorenog koda s 34 dostupna jezična paketa

SmartGit

– Git grafički klijent ( Otvoreni izvor distribuiransustav kontrole verzija). Radi na Windows, Mac OS X i Linux.Cijena licence - 39 dolara

"Provjera" spremišta ("Provjeri")

Dakle, klijent je odabran. Sada morate stvoriti repozitorij za kontrolni sustav. Treba ućiVaš URL spremišta, korisničko ime i lozinka.

URL obično izgleda ovako:https://svn .hostname.com/svn/ > (možete koristiti https:// (SSL) ako imate plaćeni račun)

  1. Ići korijensku mapu, kliknite gumb "Odjava" i kreirajte radna mapa za klijenta. Sada mu možete dodavati datoteke.
  2. Nakon što su datoteke projekta ekstrahirane, možete ih uređivati ​​u lokalnom direktoriju na vašem računalu.

Nakon što napravite promjene u datotekama, kliknite gumb Prijavi na alatnoj traci kako biste ih spremili. Možete pregledati promjene i dodati im komentare - sasvim je dobra ideja, budući da ćete ubuduće točno znati na čemu ste radili, koje su promjene napravljene i o tome ćete obavještavati ostale sudionike projekta.

Vaš bi klijent također trebao omogućiti da počne raditi s revizijama u bilo kojem trenutku otvaranjem dnevnika revizija ili povijesti promjena - tada se, ako je potrebno, možete "vratiti" na prethodna verzija za svaku datoteku posebno. Sada kada ste upoznati s osnovnim pojmovima, dokumentacija

RCS (Revision Control System) je ranih 1980-ih razvio Walter F. Tichy. Sustav vam omogućuje pohranjivanje verzija samo jedne datoteke, tako da morate ručno upravljati s više datoteka. Za svaku datoteku pod kontrolom sustava podaci o verziji pohranjuju se u posebnu datoteku s nazivom izvorne datoteke kojoj se na kraju dodaju znakovi ",v". Na primjer, za datoteku file.txt verzije će biti pohranjene u datoteku file.txt,v. Za pohranjivanje verzija sustav koristi uslužni program diff, odnosno pohranjuju se samo promjene između verzija.

Pogledajmo primjer sesije s RCS-om (znak $ u nastavku označava upit operativnog sustava). Kada želimo staviti datoteku pod kontrolu RCS-a koristimo naredbu ci (iz check-in, register):

$ci datoteka.txt

Ova naredba stvara datoteku file.txt,v i briše je izvorna datoteka file.txt (osim ako vam se ne kaže da to ne činite). Ova naredba također zahtijeva opis za sve pohranjene verzije. Budući da je izvornu datoteku izbrisao sustav, moramo je zatražiti natrag kako bismo unijeli promjene. Za to koristimo naredbu co (iz odjave, kontrole):

$ co file.txt

Ova naredba vadi van Najnovija verzija našu datoteku iz file.txt,v . Sada možemo urediti datoteku file.txt i nakon što završimo s promjenama, ponovno pokrenite naredbu ci da biste spremili novu modificiranu verziju datoteke:

$ci datoteka.txt

Kada pokrenemo ovu naredbu, sustav će nas pitati za opis promjena i zatim spremiti novu verziju datoteke.

Iako je RCS usklađen minimalni zahtjevi sustavu kontrole verzija, ima sljedeće glavne nedostatke, koji su također poslužili kao poticaj za stvaranje sljedećeg sustava koji se razmatra:

  • Rad sa samo jednom datotekom, svaka datoteka se mora zasebno kontrolirati;
  • Nezgodan mehanizam simultani rad nekoliko korisnika sa sustavom, pohrana se jednostavno blokira dok je korisnik koji ju je blokirao ne otključa;

CVS

CVS (Concurrent Versions System) je još uvijek najrašireniji sustav, ali brzo gubi na popularnosti zbog nedostataka o kojima ću govoriti u nastavku. Dick Grune razvio je CVS sredinom 1980-ih. Za pohranu pojedinačnih datoteka, CVS (kao i RCS) koristi datoteke u RCS formatu, ali vam omogućuje upravljanje grupama datoteka koje se nalaze u direktorijima. CVS također koristi arhitekturu klijent-poslužitelj u kojoj su sve informacije o verziji pohranjene na poslužitelju. Korištenje klijent-poslužiteljske arhitekture omogućuje korištenje CVS-a čak i geografski raspoređenim timovima korisnika gdje svaki korisnik ima svoj radni direktorij s kopijom projekta.

Kao što naziv sugerira, korisnici mogu dijeliti sustav. Mogući sukobi prilikom mijenjanja iste datoteke rješavaju se činjenicom da sustav dopušta izmjene samo najnovije verzije datoteke. Stoga se uvijek preporučuje ažuriranje vaše radne kopije datoteka prije učitavanja vaših promjena u slučaju mogućih proturječnih izmjena. Prilikom ažuriranja, sustav automatski vrši promjene na radnoj kopiji i samo u slučaju konfliktnih promjena na jednoj od lokacija datoteke, potrebna je ručna korekcija konfliktne lokacije.

CVS vam također omogućuje održavanje više linija razvoja na projektu koristeći razvojne grane. Stoga, kao što je gore spomenuto, možete ispraviti pogreške u prvoj verziji projekta i istovremeno razvijati novu funkcionalnost.

Pogledajmo mali primjer sesije s CVS-om. Prije svega, morate uvesti projekt u CVS, to se radi pomoću naredbe import:

$ cd neki-projekt $ cvs import -m "Novi projekt" staza-u-repozitoriju nema početka

Ovdje vam opcija -m omogućuje navođenje opisa promjena izravno u naredbenom retku, a ako je izostavite, bit će pozvana uređivač teksta. Zatim je označena staza po kojoj će projekt biti pohranjen u repozitoriju (path-in-repository u našem slučaju) i nakon nje dvije oznake: oznaka programera (može biti korisna ako koristite CVS za rad na projektima koje je netko razvio else) i oznaka projekta.

Nakon što smo učitali naš projekt u repozitorij, moramo kreirati novi direktorij u kojem će se nalaziti radna kopija projekta pod kontrolom CVS-a i učitati projekt pomoću naredbe checkout (control), ili skraćeno co:

$ cd neki-radni-dir $ cvs checkout put-u-spremištu

Za naredbu checkout označavamo put do našeg projekta u repozitoriju, koji smo naveli gore u naredbi import.

Sada možemo unijeti promjene u projekt i učitati ih u repozitorij pomoću naredbe commit (make changes), ili skraćeno ci:

$ cvs commit -m "Neke promjene"

Baš kao i kod naredbe import, navodimo komentar za naše promjene pomoću opcije -m.

Ako želimo ažurirati naš radni imenik nova verzija projekt iz repozitorija koji koristimo naredba ažuriranja(update), ili skraćeno:

$cvs ažuriranje

Korišten je CVS veliki iznos projekata, ali naravno nije bio bez nedostataka, što je kasnije dovelo do pojave sljedećeg razmatranog sustava. Pogledajmo glavne nedostatke:

  • Budući da su verzije pohranjene u RCS datotekama, nije moguće spremiti verzije imenika. Standardna metoda zaobići ovu prepreku znači spremiti neku datoteku (na primjer, README.txt) u direktorij;
  • Premještanje ili preimenovanje datoteka ne podliježe kontroli verzija. Standardni način da to učinite je da prvo kopirate datoteku, uklonite staru pomoću naredbe cvs remove i zatim je dodate s novim imenom pomoću naredbe cvs add;

Subverzija

Subversion (SVN) je razvijen 2000. godine na inicijativu CollabNeta. SVN je izvorno razvijen kao "bolji CVS", a glavni cilj programera bio je ispraviti pogreške napravljene u dizajnu CVS-a uz zadržavanje sličnog sučelja. SVN, kao i CVS, koristi klijent-poslužitelj arhitekturu. Najznačajnije promjene u usporedbi s CVS-om uključuju:

  • Atomske promjene (commit). Ako se obrada predaje prekine, promjene se neće izvršiti.
  • Preimenovanje, kopiranje i premještanje datoteka čuva cijelu povijest promjena.
  • Direktoriji, simboličke veze i metapodaci podliježu kontroli verzija.
  • Učinkovita pohrana promjena za binarne datoteke.

Pogledajmo primjere naredbi, iako treba napomenuti da većina njih praktički ponavlja CVS naredbe. Da biste koristili projekt sa SVN-om, prvo ga morate uvesti u repozitorij pomoću naredbe import:

$ cd neki-projekt $ svn import -m staza u spremištu "Novi projekt".

Za razliku od CVS-a, nema potrebe za navođenjem oznaka programera i projekta, koje se u praksi nisu često koristile.

Sada moramo stvoriti radnu kopiju projekta pomoću naredbe checkout, ili co :

$ cd neki-radni-dir $ svn checkout put-u-spremištu

Nakon što izvršimo promjene, koristimo naredbu commit, ili ci, da spremimo promjene u repozitorij:

$ svn commit -m "Neke promjene"

A za ažuriranje radne kopije projekta, koristite naredbu update ili up.

Sustav kontrole verzija(od engleskog Version Control System - VCS, ili Revision Control System) - poseban softver za rad s informacijama koje se često mijenjaju, omogućuje pohranjivanje nekoliko verzija istog dokumenta i, ako je potrebno, vraćanje na ranije verzije, utvrđivanje tko ga je napravio i kada se ovo ili ono promijeni, i mnogo više.

Takvi sustavi se najčešće koriste u razvoju softvera za pohranjivanje datoteka programa koji se razvija.

Često se događa da više ljudi radi na istom projektu u isto vrijeme, a ako dvije osobe mijenjaju istu datoteku, onda jedna od njih može slučajno poništiti promjene koje je napravila druga. Sustavi kontrole verzija prate takve sukobe i daju sredstva za njihovo rješavanje. Većina ovih sustava može automatski spojiti (spojiti) napravljene promjene od strane različitih programera. Međutim, takvo automatsko spajanje promjena obično je moguće samo za tekstualne datoteke i pod uvjetom da su različiti dijelovi datoteke (koji se ne preklapaju) promijenjeni. Ovo ograničenje je zbog činjenice da je većina sustava kontrole verzija usmjerena na podršku procesu razvoja softvera, i izvorni kodovi programi su pohranjeni u tekstualne datoteke. Ako automatsko spajanje ne uspije, sustav može ponuditi ručno rješavanje problema.

Neki sustavi kontrole verzija daju mogućnost zaključavanja datoteke u repozitorij. Zaključavanje sprječava druge korisnike da dobiju radnu kopiju datoteke ili sprječava druge da mijenjaju radnu kopiju datoteke (na primjer, pomoću sustav datoteka) i time omogućuje ekskluzivan pristup samo korisniku koji radi s dokumentom.

Većina sustava kontrole verzija nudi sljedeće značajke:

  • omogućuju vam stvaranje različite varijante jedan dokument (grana) sa opća povijest promjene prije točke grananja i s različitima nakon nje;
  • omogućiti da se sazna tko je i kada dodao ili promijenio određeni skup redaka u datoteci;
  • voditi dnevnik promjena u koji korisnici mogu zapisati objašnjenja što su i zašto promijenili u određenoj verziji;
  • kontrolirati prava pristupa korisnika, dopuštajući ili zabranjujući čitanje ili mijenjanje podataka, ovisno o tome tko zahtijeva radnju.

Svaki sustav kontrole verzija ima svoje specifične značajke u skupu naredbi, načinu rada korisnika i administraciji. Štoviše opći red posao za većinu VCS-a potpuno je stereotipan. Ovdje se pretpostavlja da projekt, kakav god on bio, već postoji i da se njegovo spremište nalazi na poslužitelju, kojem programer ima pristup.

Početak rada sa sustavom. Prvi korak koji programer mora poduzeti je dohvaćanje radne kopije projekta ili njegovog dijela na kojem će se raditi. Ova radnja se izvodi pomoću standardna naredba izdvajanje verzije (checkout ili klon) ili korištenje posebna ekipa, koji zapravo izvodi istu radnju. Programer određuje verziju koju treba kopirati; prema zadanim postavkama, najnovija verzija (ili ona koju je administrator izabrao kao glavnu) obično se kopira.

Dnevni ciklus rada. Tipičan radni ciklus programera tijekom radnog dana izgleda ovako:

  • ažuriranje radne kopije: Kako se unose promjene u glavnu verziju projekta, radna kopija na računalu programera stari i povećava se njezino odstupanje od glavne verzije projekta, što povećava rizik od sukobljenih promjena (vidi dolje), i postaje neophodno održavati radnu kopiju u stanju što je moguće bliže trenutnoj verziji glavne verzije, tako da programer ažurira radnu kopiju što je češće moguće, što je određeno učestalošću promjena ovisno o razvojnoj aktivnosti, broju programera i vrijeme potrošeno na svako ažuriranje;
  • izmjena projekta: programer modificira projekt, mijenjajući datoteke uključene u radnu kopiju u skladu s projektnim zadatkom, ovaj se posao izvodi lokalno i ne zahtijeva pozive VCS poslužitelju;
  • izvršavanje promjena: Nakon što završi sljedeću fazu rada na zadatku, programer uređuje svoje promjene, prenoseći ih na poslužitelj (ili u glavnu granu, ako je rad na zadatku u potpunosti završen, ili u zasebnu razvojnu granu za ovaj zadatak).