Menu

GIT-kratke_upute

Leonardo Jelenkovic
GIT - vrlo kratke upute
========================

GIT je raspodijeljeni sustav za upravljanje revizijama izvornog koda. Razvijen
od strane Linusa Torwaldsa za razvoj Linuxa (2005.). Osnovna ideja jest da
sustav bude brz, bez puno komunikacije s poslužiteljem. Zato je svaka kopija
repozitorija potpuna, tj. sadrži cijelu povijest razvoja. Nije potrebna
komunikacija s poslužiteljem za operacije. Međutim, poslužitelj služi kao
centralni repozitorij na koji se promjene postavljaju i od kuda razni korisnici
mogu dohvatiti kod. Git je vrlo moćan = vrlo složen sustav. Zato se u ovim
kratkim uputama spominju samo neke jednostavnije operacije.

Usklađivanje s repozitorijem - skica repozitorija

+-------------------------+        +---------------------------------------+
|                         | clone  |                                       |
| Centralni repozitorij   | pull   | Lokalna kopija repozitorija:          |
| na javnom poslužitelju: | -----> | * repozitorij = "index"               |
| * repozitorij = "index" | <----- | * direktorij s kodom = "working tree" |
|                         |  push  |                                       |
+-------------------------+        +---------------------------------------+

Primjerice, prvi dohvat koda za OSZUR:
$ cd
$ git clone ssh://ljelenkovic@git.code.sf.net/p/oszur12/code oszur12-lj
(zamijeniti "ljelenkovic" s vlasitim korisničkim računom na Sourceforge-u)

Naknadno ažuriranje lokalne kopije s poslužiteljem:
$ cd ~/oszur12-lj
$ git pull origin master
(ažuriram "master" granu - osnovnu/početnu granu)

Pojmovi (koji se koriste u opisu rada git-a)
---------------------------------------------
Repozitorij na poslužitelju sadrži "prihvaćene promjene".
Lokalni repozitorij sadrži i "prihvaćene" promjene i "radnu verziju".
Termin za "prihvaćene promjene" jest "index".
Termin za "radnu verziju" jest "working tree".

Kada se nešto dodaje (izmjene) u "working tree" nastaje nova "promjena"
koja se zapisuje u repozitoriju - termin jest "commit".

Primjer rada
-------------

1. Dohvaćen je kod iz repozitorija.
   $ git clone ... (prema gornjim uputama)
   Dok on nije modificiran, tj. dok je isti kao
   i u repozitoriju on je "čist" - "clean".
   $ cd oszur12*

   Postaviti svoje ima za projekt (ako već nije globalno)
   $ git config user.name "YOUR NAME"
   $ git config user.email "USERNAME@users.sourceforge.net"

2. Napravljena je grana ("branch") "test":
   $ git checkout -b test
   Switched to a new branch 'test'

3. Napravljena je promjena u "working tree", npr. dodan README2 u početni
   direktorij i početni README je promijenjen (npr. nano README2).
   "Working tree" više nije "čist".
   Međutim, promjena je lokalna, nije u "index"-u.

4. Neka je promjena koju smo napravili "zadovoljavajuća" i želimo ju staviti u
   repozitorij (ispitana je).

5. Pogledaj što je sve promijenjeno:
   $ git status
   # On branch test
   # Changes not staged for commit:
   #   (use "git add <file>..." to update what will be committed)
   #   (use "git checkout -- <file>..." to discard changes in working directory)
   #
   #    modified:   README
   #
   # Untracked files:
   #   (use "git add <file>..." to include in what will be committed)
   #
   #    README2
   no changes added to commit (use "git add" and/or "git commit -a")
   $

6. Označi novu datoteku za dodavanje u repozitorij (lokalni):
   $ git add README2
   $ git status
   # On branch test
   # Changes to be committed:
   #   (use "git reset HEAD <file>..." to unstage)
   #
   #    new file:   README2
   #
   # Changes not staged for commit:
   #   (use "git add <file>..." to update what will be committed)
   #   (use "git checkout -- <file>..." to discard changes in working directory)
   #
   #    modified:   README
   #
   $

7. Pogledaj što je primijenjeno (u postojećim datotekama):
   $ git diff
   diff --git a/README b/README
   index 904c010..f280f2a 100644
   --- a/README
   +++ b/README
   @@ -5,3 +5,5 @@ Simple operating systems for demonstration only (academic)
   Build through several steps, each bringing something new.

   Contact address: leonardo@zemris.fer.hr
   +
   +Version 0.85
   $
   (zadnje dvije linije su dodane u README)

8. Odbaci promjenu za README:
   $ git checkout README     #dohvati inačicu iz repozitorija (lokalnog)

9. Nova promjena je nova datoteka - dodaj je u repozitorij, u "commit":
   $ git commit -a -m "jos jedan README"
   [test 69d5479] jos jedan README
    1 files changed, 1 insertions(+), 0 deletions(-)
    create mode 100644 README2
   $

10.Promjena je dodana u repozitorij, ali to nije svima vidljivo jer je samo u
   lokalnom. Lokalnih promjena može biti i više prije nego li ih se objavi u
   javnom repozitoriju.

11.Postavljanje promjene u centralni repozitorij (javni):
   $ git push origin test
   Password: #treba unijeti svoju Sourceforge lozinku
   Counting objects: 4, done.
   Delta compression using up to 2 threads.
   Compressing objects: 100% (2/2), done.
   Writing objects: 100% (3/3), 299 bytes, done.
   Total 3 (delta 1), reused 0 (delta 0)
   To ssh://ljelenkovic@git.code.sf.net/p/oszur12/code
    * [new branch]      test -> test
   (zapravo je korišten drugi repozitorij - zato se ova grana ne vidi u SF, tj.
    gornji ispis je djelomično lažiran)

12.Brisanje grane (OPREZNIJE, zapravo nemojte brisati svoju ni tuđe grane)
   $ git checkout master #vraćam se na početnu granu
   $ git branch -D test  #lokalno
   Deleted branch test (was 69d5479).
   $ git push origin --delete test   #briši granu na poslužitelju

   Obrisao krivu granu?! Pogledaj zadnje dodatke i odaberi onaj koji ima tu granu:
   $ git reflog
   3fef922 HEAD@{0}: checkout: moving from test to master
   69d5479 HEAD@{1}: commit: jos jedan README
   ...
   (želimo uzeti "commit" HEAD@{1} (prije 1 koraka) i od toga novu granu)
   $ git checkout -b test HEAD@{1}   #moglo se i promijeniti ime u recimo test1
   Switched to a new branch 'test'

   Eto grane natrag (i odmah je "aktiva", odabrana kao radna).

   Prije promjene aktivne grane (prije git checkout grana) provjeriti je li
   "stara" grana sačuvana (npr. git commit -a -m "čuvaj promjene").

Related

Wiki: Home