Version Control System
Matija Marohnić
Source Control Management
Što je VCS?
Sustav za upravljanje promjenama u projektu.
Npr.
5 ljudi surađuje na istom znanstvenom članku "Zašto je zijevanje zarazno?"
-
zijevanje.doc
-
zijevanje_1.doc
-
zijevanje_verzija3.docx
-
zijevanje_zadnja.doc
- zijevanje_zadnja2.doc
- zijevanje_sad_fakat_zadnja.doc
Razlike između pojedinih verzija?
Zašto VCS?
- verzioniranje proizvoda
- suradnja na istom projektu
- automatski backup
- sustavan pristup
- jednostavan deploy
- opis, datum i autor promijene
- lakša detekcija bugova
- pregled prošlosti razvoja
- automatski changelog
- fallback u slučaju bugova
- itd.
Command-line interface (CLI)
Interakcija sa računalom putem naredbi. Suprotno od GUI-a (graphical user interface), gdje se interakcija odvija putem grafičkog sučelja.
-
Terminal (UNIX)
- cmd (Windows)
Najveće stvari događale su se upravo u CLI-u, jer je iznimno moćan. Većina VCS-ova koristi se upravo na taj način.
Diff(erence)
"Igrao sam Portal 2 u multiplayer i bilo je baš fora."
"Igrao sam Portal 2 u multiplayer i bilo je baš zabavno."
Line diff
- Igrao sam Portal 2 u multiplayer i bilo je baš fora.
+ Igrao sam Portal 2 u multiplayer i bilo je baš zabavno.
Word diff
Igrao sam Portal 2 u multiplayer i bilo je baš [-fora-]{+zabavno+}.
DVCS
DVCS = Distributed Version Control System
Ne postoji centralno mjesto s kojeg se povlači kod, nego je moguće imati više grana, odnosno kopija projekata za rad na različitim značajkama.
Poznatiji VCS-ovi
- CVS
- SVN
- Mercurial
- Bazaar
- monotone
- Perforce
- LayerVault
- Git
CVS
CVS = Concurrent Versioning System
Djed svih VCS-ova (1986.)
Postao je standardan i dostupan svugdje, iako nema toliko mogućnosti kao Git i ostali VCS-ovi.
Iako je prilično star, mnogi ga dizajneri i developeri još i danas koriste za backup i dijeljenje datoteka.
Mnogi IDE-ovi koriste CVS:
- Xcode (Mac)
- Eclipse
- NetBeans
- Emacs
SVN
SVN = Subversion
Najpopularniji VCS prije Git-a. Mnogi open-source projekti koriste SVN zato što ga koriste SourceForge, Apache, Python, Ruby i mnogi drugi.
Npr. Google Code koristi isključivo SVN.
Mercurial
Vrlo brz DVCS dizajniran za veće projekte, obično ga ne koriste neovisni dizajneri i developeri.
Mercurial ~ Relating to or having characteristics (eloquence, swiftness, cleverness) attributed to the god Mercury.
Iako je vrlo brz i skalabilan, isto tako je puno jednostavniji od Gita, zbog čega je privalačan developerima. Ali nema toliko funkcija, a te funkcije su slične CVS-u.
Vim, jedan od najpopularnijih text editora, se
razvija pomoću Mercuriala.
Bazaar
DVCS koji sam sebe naziva
"Version control for human beings."
Pruža mnogo različitih tipova workflowa – solo, centraliziran i decentraliziran, s mnogo varijacija između.
Jedna od glavnih značajki Bazaara je detaljna kontrola nad setupom, moguće je prilagoditi ga gotovo bilo kojoj situaciji.
monotone
Minimalan DVCS.
Dok se ostali VCS-ovi fokusiraju na performance, Monotone se više fokusira na integritet.
Relativno je lagan za naučiti ako je korisnik upoznat sa CVS sustavima, a moguće je i unijeti prethodne CVS sustave.
Nije toliko popularan kao ostali VCS-ovi.
Perforce
Fleksibilan, skalabilan i siguran VCS za poduzeća.
Može upravljati mnogim tipovima podataka
i podržava najnovije workflowe.
LayerVault
Komercijalni VCS za dizajnere. Podržava sinkronizaciju preko sebe i Dropboxa, ima neograničeni prostor, pa tako i neograničenu povijest projekata. Pruža razne pomoćne alate kao što su ravnalo, color picker i sl.
Podržava formate kao što su .AI, .PSD, .PDF itd.
Git
Najpopularniji DVCS, napravio ga je kreator Linux kernela, Linus Torvalds.
Dobar je i za velike i za male projekte jer je vrlo brz i efikasan. Nadmašuje ostale VCS-ove zbog značajki kao što je npr. jeftino grananje projekta.
Na serveru se može instalirati podrška za Git repozitorije, dakle deploy može biti vrlo jednostavan.
Koriste ga mnoge velike firme i organizacije kao što su Google, Facebook, Micro$oft, Twitter, LinkedIn, Netflix, Android...
GitHub
Web aplikacija koja hosta Git repozitorije, pomoću koje je moguća suradnja s drugima.
Alternative
-
BitBucket
- GitLab
- Gitorious
- Google Code
- SourceForge
- Codebase
Veličina projekta
Kada se u projektu nalaze veće datoteke
on nakon nekog vremena može postati fizički vrlo velik.
Konflikti
Oni nastaju kada VCS ne može sam spojiti promijene, pa javi da postoji konflikt, koji se zatim treba ručno razriješiti.
To se događa obično kada više osoba radi izmjene:
- na istoj liniji
- u blizini iste linije
-
u datoteci koju je druga osoba izbrisala.
Broj potencijalnih konflikata može se smanjiti sustavnim i postupnim bilježenjem promijena.
Razgranatost projekta
Može se dogoditi da projekt postane previše razgranat zbog nedovoljno dobre organizacije. U tom slučaju treba težiti riješavanju i stapanju tih grana s glavnom granom.