Benu Wiki
Operating system increments, "_build for _education _not _usage"
Brought to you by:
ljelenkovic
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