Uvod u sisteme za praćenje koda

Postoje dve vrste sistema za praćenje i kontrolu verzija:

  • Sistem sa centralizovanom verzionom kontrolom (CVCS)

    Ovde pripadaju alati kao što su SVN, Perforce i CVS. Kod CVC sistema svi podaci o verzijama se nalaze na centralnom serveru dok korisnici imaju dostupnu samo trenutnu verziju na kojoj rade. Ovaj princip rada omogućava lakše održavanje i administriranje ali je sigurnost podataka problematična ukoliko dodje do otkaza sistema gube se sve informacije.

  • Sistem sa decentralizovanom verzionom kontrolom (DVCS)

    kojoj pripadaju: Mercurial, Bazaar, Darcs i Git. Kod DVC sistema korisnici pored poslednje verzije preuzimaju i kompletnu bazu o svim verzijama na tom repozitorijumu. U slučaju otkaza sistema dovoljno je da samo jedan od klijenata postavi podatke na server.

Git kao predstavnik DVCS

Git logo

Kod Git-a kao predstavnika DVCS prilikom kloniranja nekog repozitorijuma kopira se celokupna baza o projektu u tom trenutku. Nakon toga možemo koristiti lokalno sve verzije fajlova napravljene do trenutka kloniranja. Pošto se svi podaci nalaze u lokalu odziv je prilično brži nego da se podaci nalaze na udaljenom serveru.
Princip čuvanja podataka kod Git-a se zasniva na čuvanju celokupnog stanje sistema, u tom trenutku se snima tzv. snapshot svakog fajla projekta. Ukoliko neki fajl nije promenjen onda se čuva pokazivač na njegovo prethodno stanje. Prostor koji zauzima projekat koji je na Git-u je mnogo manji od istog tog projekta na SVN-u.

Osnovni pojmovi u radu sa Git-om

git data flow diagram

  • Radni direktorijum (eng. Working directory) Predstavlja lokalni folder u kome menjamo i kreiramo fajlove koji su obuhvaćeni verzionisanjem
  • Prostor pripreme (eng. staging area) ili tzv. Index. Svi fajlovi pre nego što se komituju moraju da budu pripremljeni za to. Mesto gde se oni smeštaju jeste ovaj pripremni deo. Samo oni fajlovi koji se nalaze ovde biće komitovani. Budući da Git pravi snapshot svih fajlova prilikom komita sasvim je logično postojanje pripremnog dela jer ćemo najpre ovde smeštati fajlove i na taj način sistem neće morati da pravi snapshot kad god imamo spreman neki fajl.
  • “Komitovanje” (eng. commit) je naredba sa kojim pravimo snimak promena stanja fajlova u odnosu na prethodno stanje. Važno je ovdje napomenuti da u git-u nikad ne commit-ujemo u udaljeni repozitorijum nego snimamo u lokalni repozitorijum na našem kompjuteru.
  • Repozitorijum tj. Skladište (eng. Repository ili kratko Repo) je prostor gde se smeštaju tzv. “snapshot-ovi” stanja fajlova pri komitovanju (eng. commit). Ovde se nalaze svi metapodaci i baza podataka o našem projektu. Kada neko preuzima (klonira) projekat kopira mu se ovaj direktorijum.
  • “Kloniranje” je kopiranje udaljenog repozitoriuma, ali tako da novi (lokalni) repozitorijum ostaje “svestan” da je on kopija nekog udaljenog repozitorijuma
  • “Push” je naredba sa kojom šaljemo svoje izmene na lokalnom repozitorijumu nazad na originalnu lokaciju (obično GitHub). Za korišćenje ove naredbe je potrebno da imamo ovlašćenja.
  • Ukoliko nemamo ovlašćenja da pošaljemo izmene na udaljeni repozitorijum koristimo naredbu “Pull request”. Ova naredba nije ništa drugo nego kratka poruka vlasniku nekog udaljenog repozitorijuma da imamo izmene koje bi on mogao da preuzme u svoj repozitorijum. Ova “poruka” sadrži opis izmena koje smo napravili i adresu našeg repozitorijuma.
  • “Branche” – grana projekta
  • “Bare git repository” je repozitorijum koji nema radnu verziju projekta (nema radni direktorijum) tj. sadrži samo .git direktorijum. Takav repozitorijum se uglavnom nalazi na nekom serveru, i na na njega se ne commit-uje već se sa lokalnih repozitorijuma odradi push
  • “Non-Bare git repository” je repozitorijum koji sadrži i .git direktorijum i working tree
  • “HEAD” je zamišljni pokazivač na trenutni commit unutar git-a. Obično je to zadnji commit u grani u kojoj se nalazimo, mada može biti i bilo koji drugi. Ako pokazivač ukazujena commit koji nije zadnji u grani onda se kaže da je repozitorijum u “detached HEAD” stanju.
  • GitHub servis je usluga čuvanja i deljenja Git repositorijuma na internetu. Nudi istu kontrolu i upravljanje kao Git stim što dodaje i svoje funkcionalnosti. Za razliku od Gita koji se uglavnom zasniva na radu sa komandnom linijom GitHub pruža rad sa
    Web-based grafičkim interfejsom ali i rad sa desktop aplikacijom “GitHub Desktop”. Za aktiviranje GitHub servisa je dovoljno napraviti nalog na GitHub sajtu

Instalacija

slika

slika ×
  1. Sa oficijelne stranice downloadovati verzju za windows. Instalacija je standardna jedino trba obratiti pažnju da se čekira opcija “Use Git from the Windows Command Prompt”
  2. Kontrola instalacije sa naredbom u command prompt-u:

  3. Konfigurisanje imena:

  4. Konfigurisanje Email adrese:

“GitHub Desktop” instalacija

Download-ovati GitHub Desktop za windows sa oficijelne stranice. Po završetku standardne instalacije se otvara login forma za prijavljivanje na GitHub nalog. Nakon toga aplikacija je spremna za korišćenje.

.gitignore

Pored toga što smo izabrali folder u okviru koga će se pratiti promene na fajlovima (to je folder u kome će biti smešten repozitorium), potrebno je izbaciti sa liste praćenja promena neke nepotrebne fajlove koji se često zateknu u okviru ovog foldera (fajlovi koje koristi editor ili fajlovi koji nastaju kompajliranjem i sl.). Fajlove koje ne želimo da pratimo “obeležavamo” u okviru .gitignore fajla. Stoga je bitno da pre inicijacije Git-a napravimo .gitignore fajl u kome će biti obeleženi svi fajlovi i folderi koje ne želimo da pratimo.

Princip obeležavanja fajlova i foldera koje ne želimo da pratimo unutar .gitignore je sledeći:

  • Upišemo ekstenzije fajlova koje ne želimo da pratimo kao npr.

    .swo .swp

  • Upišemo foldere koje ne želimo da pratimo:

    ime_foldera

    U slučaju da unutar foldera postoji fajl koji ipak treba da se prati upišemo:

    !nekiFajl.txt

  • Upišemo folder i njegove podfoldere koje ne želimo da pratimo:

    ime_foldera/ime_podfoldera

  • Upišemo folder i sve njegove podfoldere koje ne želimo da pratimo:

    ime_foldera/*

  • Upišemo sve objekate i arhive koje želimo da ignorišemo:

    *.[oa]

Primer

Template .gitignore fajla pri radu sa child temom u wordpress projektu:

Napomena:
Git neće prestati da prati neki fajl ako je već počeo da ga prati, čak i ako ga ubacimo u .gitignore. Za ovakav fajl koji je git već počeo da prati, potrebno je pre stavljanja u .gitignore, narediti git-u da prestane da ga prati sa naredbom:

Više o ovome pogledaj u delu pod nazivom “Brisanje fajla iz snapshotova”

Pogledajte slične članke...

Podelite:

Ostavite komentar