Struktura repozitorija i upute za popravak

Struktura repozitorija

Potrebno stanje grana (ne direktorija):
  1. master - početna grana - NE MIJENJATI NIŠTA U NJOJ
  2. lab1 - promjene samo u direktoriju lab1 kojeg dodati
  3. lab2 - promjene samo u Chapter_02_Source_tree/04_Debugging/ samo one koje se tiču druge vježbe. Mijenjaju se postojeće datoteke! Ne stvarati nove direktorije i u njima kopirati cijelu strukturu koda. Naredba git diff master će tada pokazati promjene u kodu (nakon što su one dodane u granu lab2).
  4. lab3 - grana koja uključuje promjene samo prema 3. zadatku. NE uključuje promjene iz lab1 ni lab2
  5. (itd.)
Pri predaji pojedinih zadataka od studenata se dodatno tražila modifikacija (pri predaji u laboratoriju). Promjene su tada rađene u grani LABx (x je broj)

Što ako vaš repozitorij nije napravljen po gornjim pravilima?

Prvo treba provjeriti te ako nije onda popraviti.

Korisna naredba je git diff. Npr. usporedba među grane master i ostalih:
$ git checkout master
$ git diff master..lab1
$ git diff master..lab2
...
Usporedba između lab1 i lab2
$ git checkout lab1
$ git diff lab1..lab2
U promjenama se vide problemi (što je u pojedinoj grani a nije trebalo biti).

Obzirom na moguće "probleme" pri radu popravaka preporuka je napraviti kopiju cijela direktorija. Npr. ako je radni direktorij /home/user/osur/benu napraviti kopiju: cd && cp -r osur/benu osur/benu-rezerva

U slučaju problema, iz kopije se uvijek može kopirati datoteka/direktorij koji "više nije" dohvatljiv (na jednostavan način) iz dijelom popravljena koda.

U KOPIJI NIŠTA NE BRISATI, NE KORISTITI NAREDBE git add, git commit I SL.

Primjer poništavanja promjene u grani master

(Brojke korištene u ovom prikazu vjerojatno nisu iste kao u vašem!)
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git log
commit 1d33c53b94aec8bd5f1440f2edfa3d2f7dc97413      //identifikacijski broj ove promjene, koristi se u nastavku, različit u vašem kodu
Author: Leonardo Jelenkovic <leonardo.jelenkovic@fer.hr>
Date:   Mon Feb 27 21:28:33 2017 +0100

    Pocetni prazan repozitorij
Ovako bi trebalo biti, bez vaših promjena u grani master.

Ako nije tako nego npr.:

$ git log
commit ffceb9d90fa4d8840ccc6e63f246f1a7f83ac2c6
Author: Leonardo Jelenkovic <leonardo.jelenkovic@fer.hr>
Date:   Thu Mar 23 14:27:10 2017 +0100

    lab1

commit 1d33c53b94aec8bd5f1440f2edfa3d2f7dc97413
Author: Leonardo Jelenkovic <leonardo.jelenkovic@fer.hr>
Date:   Mon Feb 27 21:28:33 2017 +0100

    Pocetni prazan repozitorij
onda treba vjerojatno popraviti. Pogledati da li ima promjena:
$ git diff 1d33c53b94aec8bd5f1440f2edfa3d2f7dc97413
Ako nema, onda je repozitorij isti kao i početan (greška je u međuvremenu popravljena). Ako ima, onda to treba popraviti. Ima mnogo načina kako to napraviti.

Dva pristupa su opisana u nastavku.

1. Koristiti git revert naredbu (poništiti sve commitove osim početnog)

$ git revert ffceb9d90fa4d8840ccc6e63f246f1a7f83ac2c6
$ git push
Ako ima više promjena navesti ih sve (njihove oznake - heksadekadske brojeve). Navedenu promjenu onda pohraniti u repozitorij (git push origin master).

2. Prepisati promjene početnim stanjem

a) Do početnih datoteka doći sa:

   $ git checkout 1d33c53b94aec8bd5f1440f2edfa3d2f7dc97413   //zamijeniti id-jem prvog commita!
   $ mkdir ../privremeno
   $ cp -r * ../privremeno/
b) Obrisati sve iz direktorija (osim .git direktorija)
   $ git checkout master
   $ rm -rf *   //OPREZNO S OVOM NAREDBOM - provjerite da ste u repozitoriju!
c) Kopirati izvorni sadržaj
   $ mv ../privremeno/* .
d) Dodati sve u repozitorij
   $ git add -A
   $ git commit -m "vracam pocetno stanje"
   $ git push origin master

Provjera ispravnosti

Kod u pojedinog grani mora raditi ono što je zadatkom zadano.
Provjeriti:
  1. prevodi li se kod (make ne smije javljati greške)
  2. pokreće li se sustav (make qemu)

Ukratko:

git checkout lab1
cd Chapter_02_Source_tree/04_Debugging/
make
make qemu
make cleanall
git diff master
Sve treba biti prema očekivanome.
I tako za sve vježbe.