Goodbye subversion, Hello git!
Pradėję kartu lipdyti blogosfera.lt, mes su Justinu nutarėm mesti lauk subversion versijų kontrolės sistemą ir išmėginti ką nors naujo. Aš siūliau bazaar, kurį jau buvau spėjęs išmėginti, tačiau Justinas labiau norėjo išmėginti git. Taip ir padarėm.
Kuo blogai subversion? Pati pagrindinė priežastis, dėl kurios aš norėjau atsikratyti šios sitemos, buvo jos centralizuotumas. Naujos versijos išsaugoti neįmanoma neturint interneto ryšio. Yra tekę dėl to ir nesuspėti atlikti darbų, nes naujų pradėti negalėjau, kol seni "nepriduoti" į serverį, taip pat esu ne kartą programavęs traukiniuose, oro uostuose ar dar kur nors be interneto ryšio, be kurio su subversion neįmanoma pasiekti repozitorijos.
Bazaar man patiko, nes pašalino centralizuotumo problemą. Dar galėčiau pasakyt, kad perėjus prie git, susidarė įspūdis, jog bazaar yra be galo lėta sistema, tačiau tai sunku pastebėti pripratus dirbti su nutolusiais subversion serveriais.
O kuo gi ypatinga git? Git kaip ir bazaar yra "distributed" sistema, t.y. visa repozitorijos istorija yra saugoma pačiame kompiuteryje ir visos naujos versijos taip pat saugomos tiesiai į kompiuterį ir tik esant reikalui (pvz. norint dalintis kodu su kitais) duomenys siunčiami kitur. Pirmas privalumas lyginant su bazaar - nežmoniškas greitis. Visos vykdomos operacijos vykdomos įspūdingai greitai ir kiek ilgiau užtrunka tik duomenų siuntimas į serverį ar iš jo, tačiau užtrunka irgi neilgai, nes siunčiami tik pasikeitę duomenys, tad realiai laukti niekad netenka.
Didelis privalumas, kuris subversion vartotojams nėra toks akivaizdus iš pat pradžių - branche'inimas ir megre'inimas, kas pasak likit.lt vadinama šakojimu bei suliejimu. Esu kalbėjęs apie tai ne su vienu kolega programuotoju ir jei kuris nors iš jų šakoja kodą, tai labai minimaliai. Aš pats naudodamas subversion naudojau realiai atskirą šaką stabiliai kodo versijai laikyti, į kurią reguliariai suliedavau naujus pakeitimus iš trunk šakos, bei atskiras šakas skirtingiems projektams. Subversion 1.5 jau turi smarkiai supaprastintą suliejimų sekimo (merge tracking) mechanizmą, todėl situacija pagerėjo, tačiau dar nėra tobula. git buvo kurta su mintimi, kad šakų suliejimas vyks itin dažnai, tad tai atliekama itin greitai ir paprastai.
Verta paminėti, kad git sukūrė ne kas kitas, o pats Linus Torvalds, kuris ieškojo tinkamos versijų sistemos Linux branduolio administravimui, tačiau nieko gero nerado ir sukūrė git. Rekomenduoju pasižiūrėti šią jo kalbą, pristatančią git svečiuose pas google. Jis taip pat labai nemaloniai kalba apie subversion vartotojus ir siūlo jiems tiesiog išeiti, bet jo argumentai man labai suprantami bei pateisinami (subversion skelbiasi esą "cvs done right", bet Linus teigia, kad cvs yra toks blogis, kad padaryti jo teisingai tiesiog neįmanoma).
Norint pradėti naudoti git taip pat rekomenduoju video įrašą, kuriame gana išsamiai apžvelgiama, kaip veikia ir kaip naudoti git. Pats nesužinojau daug naujo, tačiau esu įsitikinęs, kad man tai būtų smarkiai padėję, jei būčiau pačioje pažinties su git pradžioje šį video peržiūrėjęs.
Na ir paskutinis dalykas, kurį dar būtinai noriu paminėti - GitHub. Labai paprasta bei patogi tarnyba kodo publikavimui bei dalinimuisi su kitais. Leidžia klonuoti kitus atviro kodo projektus ir daryt juose pakeitimus, po to siūlyt pakeitimus kodo autoriams ir t.t. Privačių repozitorijų talpinimas šiek tiek kainuoja, tačiau kainos nesikandžioja. Man užtat dabar nebereikia naudoti Trac'o, kuris ant mano silpno serveriuko labai labai lėtai veikė. Tiesa, užduotims (ticketams) reikalingas atskiras įrankis, bet tokių pilna įvairiausių - rekomenduočiau Lighthouseapp arba Basecamp.
Sukurta: 2009-02-26 21:33:57 UTC
Žymės:
git, github, subversion
Komentarų: 14
Panašūs įrašai
Komentarai
Tomas Markauskas
2009-02-26 22:35
Python? Yra įvairių įrankių darbui su subversion ir tik Trac'as naudoja python'ą mano žiniomis. Redmine pvz. naudoja Ruby on rails. Taip pat yra ir su php rašytų ir visokių kitokių. Paskutinėje pastraipoje paminėjau Github'ą. Jis kainuoja privatiems projektams (ne atviro kodo), tačiau yra labai patogus. Užduotims žr. paskutines dvi nuorodas.
Archatas
2009-02-27 02:21
Hello, Tomas! :)
O man patinka Trac'e ticketų, wiki ir kodo naršymo kombinacija. Ir šiaip dėl įvairių darbinių priežasčių aš dar nesiruošiu migruot.
O dėl Git man dar vis vien liko toks dalykas neaiškus.. Tarkim, jei tu ir aš turime bendrą projektą ir norime dalintis kodu, tai vienas nuo kito turim nusikopijuoti branchą. Bet kaip tai atlikti, jei abiejų IP adresai dinamiškai sugeneruoti, nes mūsų kompai – ne serveriai?
Jeigu vienintelis būdas tai atlikti – per nuotolinį serverį, tai kuo tai skiriasi nuo centralizuotų sistemų?
Dalius
2009-02-27 05:56
Tiesa sakant, nesupratau prie ko čia trac'as iš viso. Trac'as nėra griežtai susijęs su subversion. Tikrai yra ir mercurial integracija (nenaudoju tai nežinau dabartinio statuso). Žodžiu, trac'o galima ir neminėti ir padėti į šalį.
Kad perėjai prie Git'o - teisingas žingsnis. Dėl brz - irgi girdėjau, kad lėtas. Dar yra Mercurial (hg), kurį irgi galima išbandyti. Beje Mercurial'as turi savo github analogą - bitbucket.org.
Tomas Markauskas
2009-02-27 12:14
Aidai, gali kiekvieną kartą įrašyt pilną IP adresą kolegos arba naudot kokį nors dyndns ar pan. Taip pat abu developeriai gali naudot skirtingus adresus publikavimui, pvz. vienas naudoja github, o kitas savo serveryje užkrauna. Bet niekas nedraudžia ir tiesiog savo kompo naudot, jei jis kaip nors išvis per tinklą pasiekiamas.
Tačiau net ir naudojant serverius kodo dalinimuisi, pvz. kad ir github, pati sistema vistiek išlieka decentralizuota, nes siuntimas į tą centrinį serverį nėra privalomas - prieš tai gali išsaugot tūkstantį versijų ir kitais būdais (vietiniame tinkle pvz.) pasidalinti su savo draugais bei iš jų dar ir jų pakeitimus pasiimti.
Daliau, teisingai dėl Trac'o sakai, aš jį paminėjau tik todėl, kad pats jį ilgą laiką naudojau ir jau seniai alternatyvos ieškojau, tačiau visos buvo arba brangios, arba sudėtinga instaliacija, arba šiaip kas nors negerai... Man tiesiog dabar labai gera, kad galiu naudot github'ą :)
Pawka
2009-03-02 07:45
Linusas tai ne pirmą kartą garsėja savo iškalbomis. Kažkada buvo pareiškęs, kad Gnome kuria interfeiso naciai :-) O šiaip aš kažkaip prie mercurial linkstu.
Tomas Markauskas
2009-03-02 11:34
Mercurialo nebandžiau, tačiau sprendžiant iš to, ką dabar radau apie jį, tai atrodo irgi visai neblogai. Jei mane kada kažkur nuvils git, tada galbūt išmėginsiu. Dėkui :)
pumba
2009-03-10 01:05
geras ir nemokamas SVN servisas (ir dar rodos lenkų darytas):
http://www.springloops.com/
Egidijus
2009-04-29 12:00
Mercurial yra gėris. :)
Sigis
2009-06-10 22:13
Esu vieno stambaus projekto developeris ir naudojame subversion. Buvo minčių keisti į kažką patogesnio, tačiau koją pakišo įrankių nebuvimas windowsui. Vartotojai kurie pumpuoja kodus didžioji dauguma windozeriai :)
Nesidomėjau kaip situacija yra su eclipse. Bet ne visi ją naudajasi, kai kurie Tortoise svn naudojasi.
Gal žinote kas neblogų GUI git repozitoriams ?
Tomas Markauskas
2009-06-10 22:44
Deja nežinau nieko Windowsams. MacOSX yra labai nuostabus įrankis GitX, tačiau jo galimybės labai ribotos (galima tik naršyt visą repozitoriją bei commitinti). Aš asmeniškai labai mėgsti dirbti tiesiog terminale.
Sigis
2009-06-11 17:23
Dėkui už atsiliepimą. Radau kažką idomaus. Tortoise GIT, nors jis dar vystykluose. Išbandysime ant testo, jeigu pasirodys gana patogus. Šio straipsnio dėka ir mes migruosime į GIT :)
SVNg
2009-12-08 20:41
http://svng.idarbas.lt - nemokamas SVN hostingas!
Tomas Markauskas
2009-12-09 05:55
Tas nemokamas hostingas šiuo metu neprisijungia prie savo duomenų bazės.

2009-02-26 22:26
Niekada nesiskundžiau subversion sistema, nes buvau įpratęs ją laikyti lokaliai, o esant reikalui - syncint su serveriu. O bet tačiau, šis straipsnis mane labai sudomino ir artimiausiu laiku atidžiau pasižiūrėsiu į git galimybes.
Mane bene labiausiai domina git integracija į web'ą, nes tarkim subversion'ui būtinai reikalingas python'as ( ar perl'as, nebepamenu ... ). Gal teko domėtis ?