Gerrit Code Review: Difference between revisions

From Peters wiki
Jump to navigation Jump to search
mNo edit summary
Line 15: Line 15:
En commit som måste granskas och verifieras innan den kan kan submittas till repot. Gerri använder ett poängsystem där verifiering +1 betyder ok, och -1 betyder att committen underkändes. För granskning kan -2 till +2 poäng sättas. -1 till +1 betyder rekommendationer. -2 betyder att committen underkänds och +2 betyder att den kan accepteras.
En commit som måste granskas och verifieras innan den kan kan submittas till repot. Gerri använder ett poängsystem där verifiering +1 betyder ok, och -1 betyder att committen underkändes. För granskning kan -2 till +2 poäng sättas. -1 till +1 betyder rekommendationer. -2 betyder att committen underkänds och +2 betyder att den kan accepteras.


Gerrit stödjer också olika policies när en commit får submittas till t.ex. master branchen. Gerrit kan tillåta att den måste göra triviala mergningar, men man kan också vara sträng och kräva att committen baseras på den senaste committen som redan finns i repot (s.k. fast-forward).
Gerrit stödjer också olika policies när en commit får submittas till t.ex. master branchen. Gerrit kan tillåta att den måste göra triviala mergningar, men man kan också vara sträng och kräva att committen baseras på den senaste committen som redan finns i repot (s.k. fast-forward). Följande policies existerar:
* Fast-forward only
* Merge if necessary
* Always merge
* Cherry-pick


= Komma igång =
= Komma igång =

Revision as of 18:14, 11 May 2013


Denna artikel beskriver hur man använder Gerrit Code Review. Hur man administrerar sina repos utan granskningsfunktionen i Gerrit står beskrivet här.

Introduktion

Gerrit fyller främst två funktioner:

  • Administrera repo/projekt rättigheter
  • Support för granskning av commits innan dom mergas in i repot

Istället för att pusha commits direkt till t.ex. master, så pushar man till en fiktiv granskningsbranch som heter for/master. Eftersom en commit kan underkännas och kräver justering innan acceptering, så använder Gerrit ett Change-Id i commit meddelandet för att koppla ihop dessa till samma ändring. Nya commits med samma Change-Id blir nya s.k. patch sets i Gerrit. Commits som har olika Change-Ids behandlas som helt olika förändringar. Det går även att ställa in så man har rättighet att pusha direkt till master (eller annan) branch. Man går då förbi granskningsdelen i Gerrit.

En commit som måste granskas och verifieras innan den kan kan submittas till repot. Gerri använder ett poängsystem där verifiering +1 betyder ok, och -1 betyder att committen underkändes. För granskning kan -2 till +2 poäng sättas. -1 till +1 betyder rekommendationer. -2 betyder att committen underkänds och +2 betyder att den kan accepteras.

Gerrit stödjer också olika policies när en commit får submittas till t.ex. master branchen. Gerrit kan tillåta att den måste göra triviala mergningar, men man kan också vara sträng och kräva att committen baseras på den senaste committen som redan finns i repot (s.k. fast-forward). Följande policies existerar:

  • Fast-forward only
  • Merge if necessary
  • Always merge
  • Cherry-pick

Komma igång

Gerrits webinterface körs oftast på port 8080 och git kommandona över ssh körs oftast på port 29418. För att komma igång med Gerrit, så behöver du ett konto samt ladda upp din publika del av en SSH nyckel. Om du inte redan har ett SSH nyckelpar, skapa ett via kommandot ssh-keygen. För att skapa en RSA nyckel, kör kommandot:

user $ ssh-keygen -t rsa

Om du inte vill skydda nyckeln med ett lösenord, tryck bara på enter när lösenord efterfrågas.

Logga in på Gerrit. Gå till Settings och SSH Public Keys. Ladda upp din publika nyckel, dvs ofta innehållet i filen ~/.ssh/id_rsa.pub om du skapade en RSA nyckel enligt ovan.

För att testa din nyckel, kör följande kommando:

user $ ssh -p 29418 <host>

Om allt går bra ska du se en hälsningsfras liknande:

  ****    Welcome to Gerrit Code Review    ****

  Hi, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://USER@HOST:29418/REPOSITORY_NAME.git

Connection to HOST closed.

Klona ett repo

Normalt sett behöver man bara klona ett repo en gång. Man får då tillgång till alla version av repot. För att sen uppdatera sin klon använder man git pull eller git fetch. Exempel: Klona ett repo som heter helloworld:

user $ git clone ssh://<host>:29418/helloworld.git

Kopiera Change-Id Commit Hook från Gerrit

För att automatiskt generera och lägga till ett Change-Id till commit-meddelandet. Kopiera en commit-hook ifrån Gerrit. Gå till root-katalogen i ditt klonade repo och kör kommandot:

user $ scp -p -P 29418 <host>:hooks/commit-msg .git/hooks/

Detta behöver bara göras en gång efter att du klonat ett repo.

Pusha en commit till master för granskning

Innan du pushar ditt resultat så måste ändringarna vara squashade till en commit, och beroende på regler i Gerrit, ha ett Change-Id i commit meddelandet och ev. vara baserad på senaste commiten som finns på master branchen. Mer om detta hur man jobbar i Git.

När dina förändringar du gjort på en lokal branch är klara, så pushar du dom från din branch till master via kommandot:

user $ git push origin HEAD:refs/for/master

Om allt gått bra så ska din push synas i Gerrit.

Efter att din commit granskats och testats, kan den publiceras från Gerrit och först då är den verkligen inne på master branchen i repot i Gerrit. Refspecen for/master är en fiktiv branch i Gerrit dit alla pushar sina commits som ska till master branchen. Se det som en kö, fast man behöver inte följa ordningen. Den som blivit granskad först blir också den som mergas till master först.

Enklare kompletta exempel

Klona ett repository, förändra och pusha tillbaka till repositoryt för granskning

Antag att vi vill jobba mot ett Gerrit repository som heter quadcopter, för att klona repositoryt kör:

user $ git clone ssh://<username>@kerwien.homeip.net:29418/quadcopter.git

Man kan utesluta <username> i alla kommandon om ens username på datorn är samma som det man har på Gerrit servern. Gå ner i repositoryt:

user $ cd quadcopter

Kopiera commit-hooken från Gert:

user $ scp -p -P 29418 <username>@kerwien.homeip.net:hooks/commit-msg .git/hooks/

Skapa en lokal branch, samt byt till denna, som heter first:

user $ git checkout -b first

Man bör alltid byta till en branch och inte jobba direkt på master branchen. Genomför editering i någon fil.

Kommitta ändringen till ditt lokala respository med kommentaren "first commit" (texten är valfri):

user $ git commit -am "first commit"

Pusha upp ändringen till Gerrit för granskning och sen merge till master branchen:

user $ git push origin HEAD:refs/for/master

Logga in på Gerrit webben och kolla att din kommitt kommit upp för granskning och test. Du bör hitta den under t.ex. My => Changes.