Versioonihalduskeskkonnad GitHubi, GitLabi ja Bitbucketi näitel: Difference between revisions
Line 125: | Line 125: | ||
Iga tõsisema tarkvaraprojekti loomisel tuleb projekti koodi jagada erinevate arendajate vahel. Lisaks tuleb erinevate arendajate poolt loodud, muudetud, parandatud ja täiendatud koodi hallata ning erinevatel etappidel kokku koondada ühtselt töötavaks tarkvaraks. Seda aitavad kõige paremini korraldada erinevad versioonihaldussüsteemid, millest kõige populaarsemaks on kujunenud jagatud süsteemil ''(Distributed Version Control System - DVCS) [https://scmquest.com/centralized-vs-distributed-version-control-systems/]'' baseeruv Git [https://www.amarinfotech.com/gitlab-vs-github-vs-bitbucket.html] [https://www.atlassian.com/git/tutorials/what-is-git], mille kasutamisel on versioonihaldus keskkondadest valida kolme peamise vahel mida eelpool on tutvustatud: Github, Bitbucket või Gitlab. Selleks, et valida nii enda projekt kui ka projektiga tegeleva tiimi jaoks kõige parem lahendus on oluline aru saada nende keskkondade peamistest erinevustest ja sarnasustest. | Iga tõsisema tarkvaraprojekti loomisel tuleb projekti koodi jagada erinevate arendajate vahel. Lisaks tuleb erinevate arendajate poolt loodud, muudetud, parandatud ja täiendatud koodi hallata ning erinevatel etappidel kokku koondada ühtselt töötavaks tarkvaraks. Seda aitavad kõige paremini korraldada erinevad versioonihaldussüsteemid, millest kõige populaarsemaks on kujunenud jagatud süsteemil ''(Distributed Version Control System - DVCS) [https://scmquest.com/centralized-vs-distributed-version-control-systems/]'' baseeruv Git [https://www.amarinfotech.com/gitlab-vs-github-vs-bitbucket.html] [https://www.atlassian.com/git/tutorials/what-is-git], mille kasutamisel on versioonihaldus keskkondadest valida kolme peamise vahel mida eelpool on tutvustatud: Github, Bitbucket või Gitlab. Selleks, et valida nii enda projekt kui ka projektiga tegeleva tiimi jaoks kõige parem lahendus on oluline aru saada nende keskkondade peamistest erinevustest ja sarnasustest. | ||
'''Peamised võrdlusmomendid | '''Peamised võrdlusmomendid''' | ||
Kuigi suures pildis võib öelda, et kõik eeltutvustatud vesrsioonihaldus keskkonnad võimaldavad teha praktiliselt sarnaseid asju toome siinkohal välja mõningad erinevused, mis võivad saada määravaks vastamaks küsimusele: "Millist versioonihaldus keskkonda ja millisel juhul oleks ikkagi mõtekas kasutada?". | Kuigi suures pildis võib öelda, et kõik eeltutvustatud vesrsioonihaldus keskkonnad võimaldavad teha praktiliselt sarnaseid asju toome siinkohal välja mõningad erinevused, mis võivad saada määravaks vastamaks küsimusele: "Millist versioonihaldus keskkonda ja millisel juhul oleks ikkagi mõtekas kasutada?". | ||
Line 136: | Line 136: | ||
'''Kuidas võiks | '''Kuidas võiks neid keskkondi kasutama õppida''' | ||
... | ... |
Revision as of 07:21, 2 May 2020
Sissejuhatus
Versioonikontrolli [1] kasutatakse erinevates keskkondades. Versioonihaldust võivad pidada tekstitöötlus programmid, tabelarvutusprogrammid, veebilehed, sisuhaldussüsteemid kui ka Wikipedia ise. Versioonihaldus võimaldab näha dokumendi vaheseisu kui ka tagasi pöörata dokumendi eelnevasse versiooni.
Versioonihaldus
Iga arendaja puutub varem või hiljem kokku versioonihaldusega. Versioonihaldus võimaldab arendajal kirjutatud koodi versioneerida. On võimalik näha minevikus tehtud muudatusi, kes need muudatused tegi, miks tegi (põhjus koos kommentaaridega) ja millal need tehtud on. See kõik on vajalik kirjutatud koodi paremaks haldamiseks ning kõige parema tulemuse annavad need võimalused siis kui mitu arendajat koostöös tegelevad ühe projektiga.
Versioonihaldussüsteemid
Versioonihaldussüsteemid on need rakendused mida kasutavad versioonihalduskeskkonnad projektifailide haldamiseks. Versioonihalduse keskkondi on aegade algusest loodud erinevaid, erinevatel põhjustel erinevate inimeste poolt. Suurimaks üheks keskkonnaks on GitHub millel on kohe kannul GitLab ning kaugeltki maha ei jää ka Bitbucket. Kõik loetletud süsteemid on ehitatud Git'i peale mis on üks vanematest versioonihaldussüsteemidest. Peale Git'i on veel CVS, SVN, Mercurial, Monotone jm.
Versioonihalduskeskkonnad on loonud mitmeid oma pakette ja teenuseid laiendamaks Giti funktsionaalsust. Lisaks on loodud ka hinnastatud võimalusi meeskondadele ja ettevõtetele mis pakuvad erinevat võimekust ja funktsioone veelgi parema koostöö kogemuse pakkumiseks. Üldiselt pakutakse põhifunktsionaalsust kõigile kuid suuremate inimeste hulga ja lisavõimaluste puhul tahetakse seda paketi, teenuse või plaanina pakkuda, olenevalt kuidas keskkond seda nimetanud on.
Rõhku on pandud ka turvalisusele. Võimalus on saada teavitus kui projektis kasutatavas komponendis on leitud turvanõrkus või mõni ligipääsu võti on jäänud lähtekoodi. Jällegi, täpsemad ja veel turvalisust lisavad teenused on kasutatavad ainult parema plaani omanikele. Versioonihalduskeskkonna poolt pakutakse ettevõtte tüüpi plaani tellinutele lisaks veel kasutajatuge.
Repositooriumid
Projektid on repositooriumid kust sikutatakse faile (pull) [2], lükatakse neid üles (push) [3], kloonitakse omale (clone) [4], liigutatakse ringi (mv) [5], kustutatakse (rm) [6] jpm. Versioonihalduskeskkonnad hoiustavad repositooriumeid ning lihtsustavad arendajate koostööd. Projekti sikutamisega tiritakse projektifailid omale soovitud keskkonda nende kallal töötamiseks. Tehtud soovitud muudatused, saadetakse need projekti tagasi teadmisega, et vanem versioon jääb alles. Arendajal on võimalus projekti ka mitmes seadmes muuta eelnevalt mainitud käskude abil. Mitmes arvutis tööd tehes on lõpuks tulemus mestida (merge) [7] ning saab kõik jälle ühtseks.
Eelnevat saab lahendada kasutades käsurea käske kui ka versioonihalduskeskkonna graafilist liidest. Igal huvilisel on võimalik minna uudistama omale huvi pakkuvat avaliku repositooriumit. Näiteks on võimalik uurida kuidas on loodud meie ID-kaardi tarkvara. Sellist koodis tuhnimist isegi soovitatakse, et õppida parimatelt. Kunagi versioonihalduskeskkondi polnud mis koodi avalikult näitaks ning nt. Bill Gates käis kooli tagant prügikastist teiste programmeerijate minema visatud väljaprintide pealt vaatamas kuidas teised seda teevad.
Keskkondadest täpsemalt
Järgnevalt tutvustame kolme välja valitud versioonihalduskeskkonda täpsemalt. Vaatame mis põhjusel ja kelle poolt erinevad keskkonnad loodi. Millisteks on need keskkonnad praeguseks arenenud ning mis lisafunktsionaalsust pakuvad. Versioonihalduskeskkonnad on tulnud pika maa ning lisanud oma arsenali erinevaid lisafunktsioone alates turvalisust puudutavaid lisasi kui ka täiendavaid taristuga integreerimise võimalusi.
GitHub
GitHub Inc on USA-s asuv globaalne ettevõte, mille peamiseks tooteks on Git-il baseeruv tarkvara versioonihalduskeskkond GitHub [8]. (Kuigi sisuliselt võiks GitHubi kasutada mistahes tüüpi dokumentide versioonihalduseks, kasutatakse seda kõige laialdasemalt siiski tarkvara jaoks [9].) Git ise on käsureal põhinev tööriist, GitHub aga üks selle veebipõhine graafiline kasutajaliides, mis pakub mitmeid lisafunktsioone.
Ajalugu
GitHubi arendus algas 2007. aastal ning Chris Wanstrath, P. J. Hyett ja Tom Preston-Werner avalikustasid platformi 2008. aasta aprillis. Algselt tuntud kui Logical Awesome LLC [10], muudeti nimi selguse mõttes 2010. aastal GitHubiks [11]. Juba 2010. aastal jõudis GitHub 1 miljoni repositooriumini [12] ning 2018. aastal oli see arv juba üle 100 miljoni [13].
2007. aastal, kui töö GitHubi kallal algas, oli Git suhteliselt vähekasutatud versioonihaldussüsteem ning puudusid kommertsiaalsed Giti hostimisvõimalused. GitHub loodigi esialgu mõttega, et seda tühja kohta täita, ning lisati võimalused koodi muudatuste paremaks jälgimiseks. GitHub lihtsustas oluliselt avatud lähtekoodiga projektide arendamist ja koostööd, ning kasvas omaette kogukonnaks, mida on nimetatud ka arendajate "Facebookiks", aga piltide ja elusündmuste jagamise asemel postitavad inimesed projektide koode ning teised arendajad kommenteerivad, pakuvad välja uusi lahendusi ning täiendavad koodi vastavalt enda vajadustele. Brian Doll, GitHubi strateegia asepresident on öelnud:
„If you look at the top 100 sites, you’ve got a handful of social sites, thirty flavors of Google with national footprints, a lot of media outlets — and GitHub.“
Tänapäeval on GitHub koduks lugematutele avatud lähtekoodiga projektidele, muuhulgas kasutavad GitHubi ka Google, Facebook, Twitter ja Microsoft. [14]
Alates 2018. aastast on GitHub Microsofti filiaal [15] [16].
GitHubist lähemalt
GitHubi tarkvara arendati välja Ruby on Rails ja Erlangi baasil. Kolm peamist GitHubi funktsionaalsust on fork, pull request ja merge. Forking tähendab, et repositoorium kopeeritakse ühelt kasutajalt teise kasutaja repositooriumi. See tähendab, et kasutaja kellel enne ei olnud projekti kirjutamise õigust, saab seda enda kasutaja alt muuta, ning seejärel saata pull requesti originaalomanikule. Viimane saab seejärel soovi korral mergeida muutudes originaalrepositooriumi ühe nupuvajutusega.
Enne GitHubi oli kogu protsess avatud lähtekoodiga projektides palju keerulisem ja pikem: projekti lähtekoodi tuli muuta lokaalselt, kirjutada ise nimekiri muutustest (nimega patch) ja see tuli meiliga saata projekti omanikule, kes siis pidi muutused üle vaatama ja need ise sisse viima. GitHubis on igal inimesel profiil, kus on näha inimeste "reputatsioon", mis suureneb iga kord kui inimese pull request heaks kiidetakse. See võimaldab projekti autoril näha, kes tema projektile muudatusettepanekuid esitavad, nende "reputatsiooni" ja varasemaid projekte. Muudatusettepanekute üle saab ka avalikult arutleda. [17]
Lähtekood, litsents
GitHubi tarkvara on suletud lähtekoodiga. Enterprise serveri funktsionaalsusega on võimalik tutvuda lähemalt GitHub Enterprise veebilehel. [18]
Teenused
GitHub pakub laias laastus kolme paketitüüpi: tasuta versioon, Pro/Team versioon ja Enterprise. Kõikide pakettidega saab töötada piiramatu arvu inimestega piiramatu arvu avalike repositooriumitega, kasutades kõiki funktsionaalsusi, ning piiramatu arvu privaatsete repositooriumitega. Privaatsete repositooriumite võimalused on aga piiratud erineval määral. Näiteks GitHub Free for user accounts (tasuta versioon üksikkasutajale) lubab privaatsete repositooriumite korral töötada kuni kolme inimesega ühe projekti kallal. Github Pro ja Team maksavad 4$ kuus kasutaja kohta, ning Enterprise 21$ kuus kasutaja kohta. On olemas veel GitHub One, mis pakub veelgi lisavõimalusi Enterprise plaanile (Advanced Security, Insights, Learning Lab, and Premium Plus Support). [19] Erinevate pakettide võimalustega ja hindadega on võimalik lähemalt tutvuda GitHubi koduleheküljel. [20]
Kasutajamugavus, juurutamine ja integratsioonivõimalused
GitHub keskendub peamiste funktsioonide töökindlusele ja kättesaadavusele, ning delegeerib lisavõimalused välistele platformidele nagu Travis ja Waffle (erinevate tööriistadega on võimalik tutvuda lähemalt siin: [21]). GitHubi konkurent GitLab pakub kindlasti rohkem integratsioonivõimalusi, kuid GitHubi peamiseks eeliseks on selle arvukas ja aktiivne kasutajaskond.
GitLab
GitLab Inc on USA's asuv tarkvaraettevõte, kelle peakorter asub San Franciscos. GitLab pakub tarkvaraarenduseks mõeldud erinevaid tööriistu ning pakettlahendusi, keskendudes peamiselt DevOps tarkvaraarenduse kultuurile omastele teenustele ja tootedele. [22]
Algusaastad
GitLab’i sünnihetkeks võib pidada 2011. aasta oktoobrikuud, mil GitLab’i esimene versioon päevavalgust nägi. GitLab’i loomisel kandis võtmeisiku rolli ukrainlane (inglise päraselt) Dmitriy Zaporozhets. GitLab kirjutati esialgu Ruby’s. Veidi ajas tagasi minnes võib lühidalt vaadata, millest ajendatult GitLab üldse loodi. Mõni aasta varem (2008) oli loodud GitHub, kellele GitLab on tänaseks üks peamisi konkurente. GitLab’i looja Dmitriy Zaporozhets’i töötas parajasti ettevõttes nimega Sphere Software, kus ta tihtipeale kasutas versioonihaldustööriistana GitHub’i. Probleem oli aga selles, et GitHub’i pakutavad teenused olid mõneti jäigad ning teisalt ka kallid. Dmitriy sõnul pidid nad töötama aegunud tööriistadega või ostma sisse kallihinnalisi tööriistasid, mis pärssisid nende tööd ega lasknud neil keskenduda oma põhilistele tööülesannetele. Hiljem on ta öelnud, et see oligi peamine ajend GitLab’i kui kvaliteetse ja taskukohasema tööriista loomiseks. [23]
Edulugu
Kuna GitLab oli esialgu siiski pigem hobiprojekt, mis ei toonud rahalist tulu, jätkas Dmitriy palgalist tööd, et tulla toime igapäevaste kulutustega. GitLab’i kasutajate arv kasvas ning teiste hulgas hakkas seda kasutama ka tema enda tööandja. Vaatamata mitmele katsele raha teenida, mh pakkudes tasulist support-teenust kui kogudes annetusi, ei osutunud need kuigi edukaks. Oluliseks muutuse tõi hollandlasest ettevõtja Sid Sibrangy, kel oli tekkinud huvi GitLab’i vastu ning soovis seda oma ettevõttes kasutada. Mõni aeg hiljem oli Dmitriy jõudnud oma elus etappi, kus ta soovis end täielikult pühendada GitLab’i arendamisse. Saatuse sümbolina pakkus Sid Sibrangy, et võtab ta palgaliselt tööle tingimusel, et Dmitriy aitab Sid’i tema ettevõttes. Nii läkski ja umbes aasta hiljem, 2014. aastal registreeriti GitLab ettevõttena, seejärel võeti tööle rohkem inimesi ning 2016. aastaks töötas ettevõttes juba ligi 100 inimest. Täna on GitLab’is tööl ca 1100 töötajat ning ettevõtte väärtus on hinnanguliselt 2,7 miljardit USA dollarit. Ajapikku on osa GitLab’ist ümber kirjutatud Go’s ja Vue.js’is. [24]
Litsents, lähtekoodi avalikkus
GitLab on saadaval nii tasuta kui tasulise versioonina. Community Edition on avatud lähtekoodiga ning omab (litsentsimaailmas võrdlemisi pehmet) MIT-litsentsi, mis teeb temast kasuliku, vabalt ning laialdaselt kasutatava tööriista. Samuti on saadaval tasuline Enterprise Edition, mis ei vasta kõigile avatud lähtekoodiga tarkvara tingimustele (kuigi kood on kätte saadav, mis lihtsustab trial-versiooni pakkumist) ning on mõeldud tasulise teenusena, sisaldades Community Edition’iga võrreldes enam tööriistu, tuge ning muid võimalusi.
GitLab’i dokumentatsiooni, lähtekoodi ning juhenditega on võimalik tutvuta GitLab’i koduleheküljel. [25]
GitLab teenused
GitLab pakub erinevaid teenuseid, mis on seotud tarkvara arendusega. Nende peamine toode või toodepakett on DevOps lifecycle, mis sisaldab erinevaid teenuseid alustades arenduse planeerimisest kuni toode lansseerimiseni – kõik saab teostada GitLab’i vahendusel. Kõige paremini iseloomustab GitLab’i teenuseid nende endi kodulehel paiknev kirjeldus:
„With GitLab, you get a complete CI/CD toolchain in a single application. One interface. One conversation. One permission model. Thousands of features. You'll be amazed at everything GitLab can do today. And we're just getting started.“ - GitLab.
GitLab pakub 30-päeva pikkust trial-perioodi täisversioonile, mille möödudes on võimalik edasi kasutada free-ligipääsuga teenuseid. Alternatiivina saab osta ka tasulisi teenuseid – Bronze, Silver ja Gold-paketid, vastavalt 4$, 19$ ja 99$-kuutasuga. Teenuste paketipõhise varieeruvusega on võimalik tutvuda GitLab'i koduleheküljel. [26] Samuti on GitLab aktiivne sotsiaalmeedias, omades kontot YouTube keskkonnas [27]
Kasutajamugavus, juurutamine ja integratsioonivõimalused
GitLab on täna selgelt väiksem kui tema „suurem vend“ GitHub, kuid toodete, teenuste ja võimaluste osas on nad teinud suurepärast tööd. GitLab’i kasutajamugavus on kõrgel tasemel. Tema juurutamine ning integratsioonivõimalused on tõenäoliselt paremad, kui GitHub’il. Näiteks on GitLab’il väga põhjalik dokumentatsioon selle kohta, mil viisil on võimalik kolida konkurentidest – GitHub’ist või Bitbucketist – GitLab’i platvormile. Võrdluseks – GitHub nii põhjalikku dokumentatsiooni ei paku.
GitLab’i kasutajatel on võimalik kasutada paralleelselt või koosmõjus ka teisi tööriistu, mille sarnaseid GitLab küll pakub, aga klient ei soovi osta, nt agiilses arenduses kasutatav Jira. Lisaks loovad kasutajamugavust ning pakuvad suurepärast integratsioonivõimalust erinevate plugin’ite näol - näiteks Jetbrains’i toodetele.
Bitbucket
Bitbucket on Git’il põhinev lähtekoodide ja arendusprojektide repostitooriumite hoidla ja koostöö tegemise tööriist tiimidele. Bitbucket kuulub Atlassian Corporation Plc’le. Suureks eeliseks on see, et Bitbucket integreerub lihtsalt teiste Atlassian’i tarkvaradega nagu Jira, HipChat, Confluence ja Bamboo. Bitbucketil on kolm mudelit: Cloud, Bitbucket Server ja Data Center.
Ajalugu
Bitbucket oli varem iseseisev startup, mille asutas Jesper Nøhr. 29. septembril 2010 ostis Bitbucketi’i ära Atlassian Corporation Plc. [28] Algselt pakkus Bitbucket ainult Mercurial’i versioonihaldustarkvara tuge. 2011 alustati ametlikult Giti versioonihaldustarkvara toetamist. [29] 2017. aasta veebruaris teatas Bitbucket, et jõudis oma platvormil 6 miljoni arendaja ja miljoni meeskonnani. [30] 2018. aasta aprillis teatas Atlassian, et Bitbucket jõudis 10 miljoni registreeritud kasutaja ja üle 28 miljoni koodihoidlani. [31]
Lähtekoodi avalikkus
Bitbucket Serveri lähtekood on avalik kõigile litsentsi omanikele.[32]
Teenused
Bitbucketil on kolm mudelit: Cloud, Bitbucket Server ja Data Center. Bitbucketi Cloud on kirjutatud Pythonis, kasutades Django veebiraamistikku. Bitbucket Cloud asub Atlassiani serverites ja sellele pääseb ligi URL-i kaudu. Bitbucket Cloud’il on sisseehitatud plugin’ad, mis võimaldavad lihtsalt oma koodi arendada, testida ja juurutada otse Bitbucket’ist. Bitbucket Server (endise nimega Stash [33]) on Java-s kirjutatud ja Apache Maveniga loodud Git-serveri ja veebiliidese kombinatsioonitoode. [34] See võimaldab kasutajatel teha Giti põhitoiminguid ning pakub integratsiooni ka teiste Atlassiani tööriistadega. Bitbucket Server on kommertstarkvara toode. See annab suurema privaatsuse koodi repsitooriumite üle, kui ettevõttel on võimalus koodi hoiustada enda serverites. Bitbucket Data Center näeb kasutajatele välja nagu üksik Bitbucket Serveri eksemplar, kuid seda on võimalik kasutada erinevate serverite pealt ning sellel on mõned lisaeelised Bitbucket Serveri ees.
Bitbucket Cloud’il on kolm hinnataset: Tasuta, Standard ja Premium. Tasuta paketi kasutajatel võib olla piiramatu hulk avalikke ja privaatseid hoidlaid. See, kui palju kasutajaid saab avalikke andmehoidlaid redigeerida / lugeda, pole piiratud, privaathoidlad on aga piiratud 5 kasutajaga, mida saab suurendada tasulise paketi valimisega. Standard ja Premium paketi hind kujuneb vastavalt privaathoidlate kasutajate arvule. Bitbucket on õpilastele ja õpetajatele tasuta, kui nad registreeruvad akadeemilise e-posti aadressiga. Teenus on tasuta ka avatud lähtekoodiga projektide jaoks, kui see vastab Atlassian’i poolt antud nõuetele. [35] Bitbucket Serveri ja Bitbucket Data Center’i puhul kujuneb hind samuti vastavalt kasutajate arvule kuid nende puhul tasuta versiooni pole. Akadeemilistele asutustele on Bitbucket Serveri litsents 50% soodustusega.[36]
Kasutajamugavus, juurutamine ja integratsioonivõimalused
Bitbucket’i eelis on erinevate integreerimisvõimaluste rohkus ja sisseehitatud ühilduvus. Bitbucket integreerub lihtsasti teiste Atlassiani poolt pakutud tarkvaratoodetega nagu näiteks JIRA, HipChat ja Bamboo. Kasutajatel on ka võimalus kasutada Atlassiani Marketplace’i, et täiustada nii Bitbucket’it kui ka teisi kasutusel olevaid Atlassiani tooteid. Lisaks on Bitbucket’il ka paindlik hinnapoliitika. Teenuse kasutamise hind kujuneb töötajate arvu pealt ning see aitab ettevõttel märkimisväärselt kokku hoida võrreldes näiteks GitHubi teenuse ostmisega. Miinuseks võiks olla aga asjaolu, et kogukonna suuruse poolest jääb Bitbucket tugevalt alla turuliider GitHub’ile.[37]
Kokkuvõte
Iga tõsisema tarkvaraprojekti loomisel tuleb projekti koodi jagada erinevate arendajate vahel. Lisaks tuleb erinevate arendajate poolt loodud, muudetud, parandatud ja täiendatud koodi hallata ning erinevatel etappidel kokku koondada ühtselt töötavaks tarkvaraks. Seda aitavad kõige paremini korraldada erinevad versioonihaldussüsteemid, millest kõige populaarsemaks on kujunenud jagatud süsteemil (Distributed Version Control System - DVCS) [38] baseeruv Git [39] [40], mille kasutamisel on versioonihaldus keskkondadest valida kolme peamise vahel mida eelpool on tutvustatud: Github, Bitbucket või Gitlab. Selleks, et valida nii enda projekt kui ka projektiga tegeleva tiimi jaoks kõige parem lahendus on oluline aru saada nende keskkondade peamistest erinevustest ja sarnasustest.
Peamised võrdlusmomendid
Kuigi suures pildis võib öelda, et kõik eeltutvustatud vesrsioonihaldus keskkonnad võimaldavad teha praktiliselt sarnaseid asju toome siinkohal välja mõningad erinevused, mis võivad saada määravaks vastamaks küsimusele: "Millist versioonihaldus keskkonda ja millisel juhul oleks ikkagi mõtekas kasutada?".
GitHub -
GitLab -
Bitbucket -
Kuidas võiks neid keskkondi kasutama õppida
...