Menu

Upute_za_rad_s_repozitorijem

Leonardo Jelenkovic
OSZUR upute za rad s repozitorijem
===================================

1. Pripremiti razvojnu okolinu
    * Linux ili slično računalo (prema [alati&slicno])
    * instalirati sve potrebne alate

    * skinuti kod s SF-a
        $ cd
        $ git clone git://git.code.sf.net/p/benu/code oszur14ro

    * provjeriti da li radi, npr.
        $ cd oszur14ro
        $ cd Chapter_08_Processes/06_Processes
        $ make qemu
        $ make cleanall

2. Napraviti "ssh" ključeve
    * provjeriti da li već postoje
        $ cd
        $ ls -al .ssh/
    * ako su tu ključevi: "id_rsa" te "id_rsa.pub"
      koji se koriste pri ssh komunikaciji te nisu zaštićeni
      zaporkom, ili je zaporka poznata => korak 3

    * napraviti nove ključeve:
        $ ssh-keygen -t rsa
        pita za imena, ostaviti ponuđeno (.ssh/id_rsa*)
        kad pita za zaporku može se ostaviti prazna (ili ne)

3. Kopirati ključeve i poslati ih mailom
    $ cd
    $ cp .ssh/id_rsa.pub ime.prezime@fer.hr.pub
        "ime.prezime@fer.hr" zamijeniti s vašom FERovom mail adresom

    Datoteku s javnim ključem "ime.prezime@fer.hr.pub" poslati na:
    oszur@zemris.fer.hr
    (Ako se koristi virtualni stroj, koristiti dijeljeni disk ili winscp
     za dohvat (ili slično), po potrebi)

4. Pričekati potvrdu (da je ključ dodan)

5. Inicijalizirati repozitorij
    $ cd
    $ git clone git@vsmaug.zemris.fer.hr:oszur14/JMBAG lokalno_ime
    JMBAG zamijeniti s matičnim broje studenta, obično 0036******,
    Npr. git clone git@vsmaug.zemris.fer.hr:oszur14/0036xxxxxx oszur-rep

    Ako je sve u redu s ključevima dohvatit će repozitorij
    (reći će da je prazan, ali to je prema očekivanjima).

    Ako pita za zaporku za "git@vsmaug.zemris.fer.hr" nešto ne valja
    s ključevima! Provjeriti je li se repozitoriju pristupa s
    računala s kojeg su poslani ključevi. Npr. ne smije pitati:

    $ git clone git@vsmaug.zemris.fer.hr:oszur13/0036xxxxxx oszur-lab
    Cloning into 'oszur-lab'...
    git@vsmaug.zemris.fer.hr's password:

    Ako pita za zaporku s kojom je kriptiran tajni ključ, onda ju unijeti.

    $ git clone git@vsmaug.zemris.fer.hr:oszur14/0036xxxxxx oszur-lab
    Initialized empty Git repository in /home/user/oszur-lab/.git/
    Enter passphrase for key '/home/user/.ssh/id_rsa':

    $ cd oszur-lab

    Postaviti "identifikaciju" u git sustavu:

    $ git config user.name "Ime Prezime" (bez "naših" znakova)
    $ git config user.email "ime.prezime@fer.hr"

    Kopirati kod iz početnog repozitorija, osim .git direktorija!
    $ cp -r ../oszur14ro/C* .
    $ cp ../oszur14ro/.gitignore .
    $ git add -A
    $ git commit -m "Pocetno"
    $ git push origin master

    Početna verzija je sada i u repozitoriju na poslužitelju.
    Datoteka .gitignore definira koje objekte ne treba pratiti, a koji se nalaze
    u lokalnom direktoriju (radnom direktoriju).

5. Raditi promjene - izrađivati laboratorijske vježbe

    Promjene za svaki zadatak raditi u zasebnoj grani: zadXX.
    Za rad s granama pogledati točku 8.
    Npr. rad započeti sa:
    $ git checkout -b zad08
    U zadanoj grani raditi zadatak 8.

6. Dodati promjene u lokalni repozitorij
    npr.
    $ git add -A
    $ git commit -m "kratki opis promjene"
    (npr. git commit -a "zapocet rad na zad8")

7. Staviti promjene u zajednički repozitorij
    Ukoliko je aktivna grana zad08:
    $ git push origin zad08

8. Izrada zadataka u zasebnim granama

    Mehanizam grananja je složen. Pojednostavljeno je to "paralelni svijet"
    stanja koda. Stvaranje nove grane je stvaranje "paralelnog svijeta" koji je
    u trenutku stvaranja jednak grani iz koje je stvoren (slično kao fork()).
    Pomicanje među granama radi se sa: git checkout ime-grane
    Prije promjene grane treba trenutnu pohraniti, ako je mijenjana.

    Osnovna namjena grana jest ispitivanje neke nove ideje/funkcionalnosti i sl.
    Ako bi ta ideja bila dobra onda bi se prihvatila (spojila s glavnom granom,
    tj. s "master"). Inače se lako odbaci (ili ostavi neka stoji jer ne smeta).

    Nova grana se može stvoriti sa:
    $ git branch ime-grane
    te sa:
    $ git checkout -b ime-grane
    Razlika je što u drugom slučaju se odmah prebacujemo u tu granu.

    Stvaranje grane zad15 i prelazak na tu granu:
    $ git checkout -b zad15

    * promjena grane s trenutne na neku drugu (npr. na postojeću zad08):
    $ git checkout zad08

    Prije promjene grane "spremiti" napravljene promjene!
    Npr. ako se radi na grani zad08 i želimo otići na granu zad15
    $ git status
    # On branch zad08
    (ima promjena, tj. ne kaže: nothing to commit (working directory clean))
    Onda prvo spremiti promjenu:
    $ git commit -am "nedovrseno"
    [...]
    $ git checkout zad17
    [...]

    Prilikom stvaranja nove grane, nova grana "nasljeđuje" zatečeno stanje
    (zatečeno u trenutnoj grani).
    Stoga je prije početka izgradnje nekog zadatka preporučeno vratiti se u
    granu master (koja je jednaka originalu - bez promjena) i iz nje napraviti
    novu granu. Ili odmah u startu napraviti sve grane.

    Npr. (raditi postepeno):
    $ git status
    # On branch master
    [...]
    $ git checkout -b zad08
    (izrada zadatka 8; ...; pohrana u (lokalni) repozitorij)
    $ git checkout master
    $ git checkout -b zad17
    (izrada zadatka 17; ...; pohrana u (lokalni) repozitorij)

    Ili najprije napraviti sve grane a onda raditi u njima:
    $ git branch zad08
    $ git branch zad17
    $ git branch zad19
    $ git branch zad30
    $ git branch zad34
    $ git checkout zad08
    (sada raditi u grani zad08)

    Početna grana naziva se "master". Obzirom da zadatke treba rješavati u
    zasebnim granama, "master" grana mora ostati nepromijenjena ("čista").
    Na taj način se vrlo jednostavno prate promjene napravljene za pojedinu
    vježbu (npr. git diff master..zad08).

    Spremanje pojedine grane u zajednički repozitorij radi se sa:
    $ git push origin ime-grane

    Spremanje svih grana (odjednom) može se napraviti sa:
    $ git push --all origin

    Dohvat koda iz repozitorija u kojem ide više grana ovisi je li se
    repozitorij dohvaća prvi puta ili ažurira postojeći.
    Ako se dohvaća prvi puta naredbom git clone, onda će se dohvatiti i sve
    grane. Ako već postoji lokalna kopija, ali nije ažurna, onda se grane mogu
    dohvaćati jedna po jedna (kako trebaju sa git pull) ili sve odjednom:
    $ git remote update
    $ git pull --all


Related

Wiki: Home