Gerrit Code Review

From Peters wiki
Revision as of 20:46, 5 February 2013 by Peter (talk | contribs)
Jump to navigation Jump to search

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.

En commit 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.

Klona ett repo

För att klona ett repo så behöver du ha ett Gerrit-konto, tillräckliga rättigheter samt ha laddat upp din publika SSH nyckel. Exempel: Klona ett projekt som heter helloworld:

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

Change-Id Commit Hook

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 <gerrit server>:hooks/commit-msg .git/hooks/

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

Pusha till master för granskning

Anta att vi har gjort utvecklat på en branch som heter test. Innan det är dax att pusha ändringarna för granskning, så squashar vi ihop alla commits till en. Sen kan man pusha med kommandot:

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