Autor sekcije: Vedran Miletić

Distribuirani sustav za upravljanje verzijama Git

Upravljanje verzijama podrazumijeva baratanje promjenama nad nekim skupom datoteka pamćenjem povijesti promjena. Spremište povijesti promjena nazivamo repozitorijem (engl. repository). Obzirom na strukturu repozitorija, razlikujemo dva pristupa:

  • centralizirani pristup, kod kojeg samo osnovni poslužitelj ima repozitorij, a klijenti imaju ono što od poslužitelja zatraže; ovaj pristup koriste CVS, Subversion i drugi
  • distribuirani pristup, kod kojeg svaki klijent ima repozitorij i time nestaje razlika između poslužitelja i klijenta; ovaj pristup koriste Git, Mercurial i drugi

Git je vrlo moćan i vrlo popularan alat za upravljanje verzijama koji koristi decentralizirani (distribuirani) pristup. Ime Git ima vrlo duboko i višeslojno značenje.

Quoting Linus: “I’m an egotistical bastard, and I name all my projects after myself. First ‘Linux’, now ‘Git’”.

(‘git’ is British slang for “pig headed, think they are always correct, argumentative”).

Alternatively, in Linus’ own words as the inventor of Git: “git” can mean anything, depending on your mood:

  • Random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of “get” may or may not be relevant.
  • Stupid. Contemptible and despicable. Simple. Take your pick from the dictionary of slang.
  • “Global information tracker”: you’re in a good mood, and it actually works for you. Angels sing and light suddenly fills the room.
  • “Goddamn idiotic truckload of sh*t”: when it breaks

Git svoju popularnost može uvelike zahvaliti servisima kao što su GitHub i Atlassian Bitbucket koji korisnicima omogućuju postavljanje repozitorija sa izvornim kodom na web. Putem tih servisa olakšana je suradnja, a uključuju i brojne druge značajke poznate sa društvenih mreža.

Više o Gitu može se saznati na službenim stranicama. Specijalno, službena dokumentacija uključuje man stranice alata, knjigu Pro Git, video materijale i poveznice na tutoriale, knjige i video materijale. Brojni tutoriali su dostupni, a neki od najboljih su upravo GitHubov Try Git i Atlassianov Git Tutorials and Training.

Osnovna konfiguracija

Globalna konfiguracija

Globalna konfiguracija odnosi se na sve repozitorije i operira na datoteci .gitconfig unutar kućnog direktorija korisnika.

  • ime, prezime i mail adresa
    • git config --global user.name "Ime Prezime"
    • git config --global user.email user@mail.com
  • ostalo, ali ne i manje važno
    • git config --global color.ui true – uključivanje korištenja boja u prikazu
    • git config --global core.editor "emacs" – uređivač teksta koji se koristi postaje Emacs
    • git config --global merge.tool "kdiff3" – alat za rad sa spajanjima grana koji se koristi postaje KDiff3

Lokalna konfiguracija

Lokalna konfiguracija odnosi se samo na trenutni repozitorij i operira na datoteci .git/config unutar repozitorija.

Todo

Ovdje treba ubaciti uputu kako promijeniti origin.

Sučelje naredbenog retka i grafička sučelja

Pregled naredbi alata Git

  • git version – informacije o verziji gita
  • git help – ispis liste najčešće korištenih naredbi s pripadajućim opisom
  • git add – dodavanje sadržaja datoteke u index
  • git branch – ispis, stvarnaje ili brisanje grane
  • git checkout – provjera brancha do radnog stabla
  • git clean – brisanje nepraćenih datoteka iz radnog stabla
  • git clone – kloniranje repozitorija u novi direktorij
  • git commit – snimanje promjena u repozitoriju
  • git describe – prikaz zadnje oznake dohvatljive iz commita
  • git diff – prikaz promjena između commitova
  • git fetch – dohvaćanje objekata iz drugog repozitorija
  • git init – stvaranje praznog git repozitorija ili reinicijalizacija postojećeg
  • git merge – spajanje dvije ili više povijesti razvoja
  • git pull – dohvaćanje i spajanje sa drugim repozitorijom ili lokalnom granom
  • git push – osvježavanje udaljenog repozitorija
  • git revert – povratak starog commita
  • git status – prikaz statusa radnog stabla
  • git tag – stvaranje, ispis ili brisanje oznake objekta potpisanog sa GPG

Grafička sučelja alata Git

  • gitk (službeni GUI, koristi Tk)
  • Tig (koristi ncurses, priladan za remote rad)
  • gitg (koristi GTK+, za samostalno proučavanje)
  • giggle (koristi GTK+, za samostalno proučavanje)
  • QGit (koristi Qt, za samostalno proučavanje)
  • git-cola (koristi Qt, za samostalno proučavanje)

Vraćanje promjena

Todo

Ovaj dio treba napisati u cijelosti.

Rad s oznakama

Todo

Ovaj dio treba napisati u cijelosti.

Grananje i spajanje

Todo

Ovaj dio treba napisati u cijelosti.

Rješavanje konflikata kod spajanja

Todo

Ovaj dio treba napisati u cijelosti.

Ostali sustavi za upravljanje verzijama

CVS

Concurrent Versions System (kraće CVS, naredba cvs) je jedan od najstarijih danas korištenih sustava za upravljanje verzijama.

Apache Subversion

Apache Subversion (kraće SVN, naredba svn) je popularan centralizirani sustav za upravljanje verzijama.

  • checkout – preuzima radnu kopiju repozitorija
  • update – postavlja postojeću radnu kopiju na određenu reviziju

Mercurial

Mercurial je, kao i Git, popularan decentralizirani sustav za upravljanje verzijama.

  • clone – preuzima repozitorij
  • pull – preuzima skupove promjena iz udaljenog repozitorija u lokalni repzitorij
  • update – postavlja postojeću radnu kopiju na određenu reviziju iz lokalnog repozitorija

Zadatak

  • Mercurial može klonirati i lokalne i udaljene repozitorije na isti način.
  • S poveznice https://hg.python.org/cpython/ ili iz /home/vedran/repositories/ izvršite kloniranje repozitorija cpython.
  • Postavite repozitorij na reviziju f3d96d28a86e. Objasnite razliku efekta naredbi pull i update u ovoj situaciji.