diff options
Diffstat (limited to 'Documentation/intro-quick.txt')
-rw-r--r-- | Documentation/intro-quick.txt | 398 |
1 files changed, 23 insertions, 375 deletions
diff --git a/Documentation/intro-quick.txt b/Documentation/intro-quick.txt index d72c6969b9..e6b1e43ede 100644 --- a/Documentation/intro-quick.txt +++ b/Documentation/intro-quick.txt @@ -1,388 +1,35 @@ -= Gerrit Code Review - A Quick Introduction += Gerrit Product Overview -Gerrit is a web-based code review tool built on top of the git version -control system, but if you've got as far as reading this guide then -you probably already know that. The purpose of this introduction is to -allow you to answer the question, is Gerrit the right tool for me? -Will it fit in my work flow and in my organization? +Gerrit is a web-based code review tool built on top of the +https://git-scm.com/[Git version control system]. This introduction provides +an overview of Gerrit and describes how Gerrit integrates into a typical +development workflow. It also provides a brief tutorial that shows how to manage +a change using Gerrit. == What is Gerrit? -It is assumed that if you're reading this then you're already convinced -of the benefits of code review in general but want some technical support -to make it easy. +Gerrit makes code review easy by providing a lightweight framework for reviewing +commits before they are accepted by the codebase. Gerrit works equally well for +projects where approving changes is restricted to selected users, as is typical +for Open Source software development, as well as projects where all contributors +are trusted. -Code reviews mean different things to different people. To some it's a -formal meeting with a projector and an entire team going through the code -line by line. To others it's getting someone to glance over the code before -it is committed. +== Learn About Gerrit -Gerrit is intended to provide a lightweight framework for reviewing -every commit before it is accepted into the code base. Changes are -uploaded to Gerrit but don't actually become a part of the project -until they've been reviewed and accepted. In many ways this is simply -tooling to support the standard open source process of submitting -patches which are then reviewed by the project members before being -applied to the code base. However Gerrit goes a step further making it -simple for all committers on a project to ensure that changes are -checked over before they're actually applied. Because of this Gerrit -is equally useful where all users are trusted committers such as may -be the case with closed-source commercial development. Either way it's -still desirable to have code reviewed to improve the quality and -maintainability of the code. After all, if only one person has seen -the code it may be a little difficult to maintain when that person -leaves. +If you're new to Gerrit and want to know more about how it can improve your +developer workflow, see the following topics: -Gerrit is firstly a staging area where changes can be checked over -before becoming a part of the code base. It is also an enabler for -this review process, capturing notes and comments about the changes to -enable discussion of the change. This is particularly useful with -distributed teams where this conversation can't happen face to face. -Even with a co-located team having a review tool as an option is -beneficial because reviews can be done at a time that is convenient -for the reviewer. This allows the developer to create the review and -explain the change while it is fresh in their mind. Without such a -tool they either need to interrupt someone to review the code or -switch context to explain the change when they've already moved on to -the next task. +. link:intro-how-gerrit-works.html[How Gerrit Works] +. link:intro-gerrit-walkthrough.html[Basic Gerrit Walkthrough] -This also creates a lasting record of the conversation which can be -useful for answering the inevitable "I know we changed this for a -reason" questions. +== Getting Started -== Where does Gerrit fit in? +This documentation contains several guides to help you learn about the Gerrit +features most relevant to you: -Any team with more than one member has a central source repository of -some kind (or they should). Git can theoretically work without such a -central location but in practice there is usually a central -repository. This serves as the authoritative copy of what is actually in -the project. This is what everyone fetches from and pushes to and is -generally where build servers and other such tools get the source -from. - -.Central Source Repository -image::images/intro-quick-central-repo.png[Authoritative Source Repository] - -Gerrit is deployed in place of this central repository and adds an -additional concept, a store of pending changes. Everyone still fetches -from the authoritative repository but instead of pushing back to it, -they push to this pending changes location. A change can only be submitted -into the authoritative repository and become an accepted part of the project -once the change has been reviewed and approved. - -.Gerrit in place of Central Repository -image::images/intro-quick-central-gerrit.png[Gerrit in place of Central Repository] - -Like any repository hosting solution, Gerrit has a powerful -link:access-control.html[access control model.] -Users can even be granted access to push directly into the central -repository, bypassing code review entirely. Gerrit can even be used -without code review, used simply to host the repositories and -controlling access. But generally it's just simpler and safer to go -through the review process even for users who are allowed to directly -push. - -== The Life and Times of a Change - -The easiest way to get a feel for how Gerrit works is to follow a -change through its entire life cycle. For the purpose of this example -we'll assume that the Gerrit Server is running on a server called -+gerrithost+ with the HTTP interface on port +8080+ and the SSH -interface on port +29418+. The project we'll be working on is called -+RecipeBook+ and we'll be developing a change for the +master+ branch. - -=== Cloning the Repository - -Obviously the first thing we need to do is get the source that we're -going to be modifying. As with any git project you do this by cloning -the central repository that Gerrit is hosting. e.g. - ----- -$ git clone ssh://gerrithost:29418/RecipeBook.git RecipeBook -Cloning into RecipeBook... ----- - -Then we need to make our actual change and commit it locally. Gerrit -doesn't really change anything here, this is just the standard editing -and git. While not strictly required, it's best to include a Change-Id -in your commit message so that Gerrit can link together different -versions of the same change being reviewed. Gerrit contains a standard -link:user-changeid.html[Change-Id commit-msg hook] -that will generate a unique Change-Id when you commit. If you don't do -this then Gerrit will generate a Change-Id when you push your change -for review. But because you don't have the Change-Id in your commit -message you'll need to manually copy it in if you need to upload -another version of your change. Because of this it's best to just -install the hook and forget about it. - -=== Creating the Review - -Once you've made your change and committed it locally it's time to -push it to Gerrit so that it can be reviewed. This is done with a git -push to the Gerrit server. Since we cloned our local repository -directly from Gerrit it is the origin so we don't have to redefine the -remote. - ----- -$ <work> -$ git commit -[master 9651f22] Change to a proper, yeast based pizza dough. - 1 files changed, 3 insertions(+), 2 deletions(-) -$ git push origin HEAD:refs/for/master -Counting objects: 5, done. -Delta compression using up to 8 threads. -Compressing objects: 100% (2/2), done. -Writing objects: 100% (3/3), 542 bytes, done. -Total 3 (delta 0), reused 0 (delta 0) -remote: -remote: New Changes: -remote: http://gerrithost:8080/68 -remote: -To ssh://gerrithost:29418/RecipeBook.git - * [new branch] HEAD -> refs/for/master ----- - -The only different thing about this is the +refs/for/master+ branch. -This is a magic branch that creates reviews that target the master -branch. For every branch Gerrit tracks there is a magic -+refs/for/<branch_name>+ that you push to to create reviews. - -In the output of this command you'll notice that there is a link to -the HTTP interface of the Gerrit server we just pushed to. This is the -web interface where we will review this commit. Let's follow that link -and see what we get. - -.Gerrit Code Review Screen -image::images/intro-quick-new-review.jpg[Gerrit Review Screen] - -This is the Gerrit code review screen where someone will come to -review the change. There isn't too much to see here yet, you can look -at the diff of your change, add some comments explaining what you did -and why, you may even add a list of people that should review the change. - -Reviewers can find changes that they want to review in any number of -ways. Gerrit has a capable link:user-search.html[search] -that allows project leaders (or anyone else) to find changes that need -to be reviewed. Users can also setup watches on Gerrit projects with a -search expression, this causes Gerrit to notify them of matching -changes. So adding a reviewer when creating a review is just a -recommendation. - -At this point the change is available for review and we need to switch -roles to continue following the change. Now let's pretend we're the -reviewer. - -=== Reviewing the Change - -The reviewer's life starts at the code review screen shown above. He -can get here in a number of ways, but for some reason they've decided -to review this change. Of particular note on this screen are the two -"Need" lines: - ----- -* Need Verified -* Need Code-Review ----- - -Gerrit's default work-flow requires two checks before a change is -accepted. Code-Review is someone looking at the code, ensuring it -meets the project guidelines, intent etc. Verifying is checking that -the code actually compiles, unit tests pass etc. Verification is -usually done by an automated build server rather than a person. There -is even a -link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[Gerrit Trigger Jenkins Plugin] -that will automatically build each uploaded change and update the -verified score accordingly. - -It is important to note that Code-Review and Verification are -different permissions in Gerrit, allowing these tasks to be separated. -For example, an automated process would have rights to verify but not -to code-review. - -Since we are the code reviewer, we're going to review the code. To do -this we can view it within the Gerrit web interface as either a -unified or side-by-side diff by selecting the appropriate option. In -the example below we've selected the side-by-side view. In either of -these views you can add inline comments by double clicking on the line -(or single click the line number) that you want to comment on. Also you -can add file comment by double clicking anywhere (not just on the -"Patch Set" words) in the table header or single clicking on the icon -in the line-number column header. Once published these comments are -visible to all, allowing discussion of the change to take place. - -.Side By Side Patch View -image::images/intro-quick-review-line-comment.jpg[Adding a Comment] - -Code reviewers end up spending a lot of time navigating these screens, -looking at and commenting on these changes. To make this as efficient -as possible Gerrit has keyboard shortcuts for most operations (and -even some operations that are only accessible via the hot-keys). At -any time you can hit the +?+ key to see the keyboard shortcuts. - -.Gerrit Hot Key Help -image::images/intro-quick-hot-key-help.jpg[Hot Key Help] - -Once we've looked over the changes we need to complete reviewing the -submission. To do this we click the _Review_ button on the change -screen where we started. This allows us to enter a Code Review label -and message. - -.Reviewing the Change -image::images/intro-quick-reviewing-the-change.jpg[Reviewing the Change] - -The label that the reviewer selects determines what can happen next. -The +1 and -1 level are just an opinion where as the +2 and -2 levels -are allowing or blocking the change. In order for a change to be -accepted it must have at least one +2 and no -2 votes. -Although these are numeric values, they in no way accumulate; -two +1s do not equate to a +2. - -Regardless of what label is selected, once the _Publish Comments_ -button has been clicked, the cover message and any comments on the -files become visible to all users. - -In this case the change was not accepted so the creator needs to -rework it. So let's switch roles back to the creator where we -started. - -=== Reworking the Change - -As long as we set up the -link:user-changeid.html[Change-Id commit-msg hook] -before we uploaded the change, re-working it is easy. All we need -to do to upload a re-worked change is to push another commit that has -the same Change-Id in the message. Since the hook added a Change-Id in -our initial commit we can simply checkout and then amend that commit. -Then push it to Gerrit in the same way as we did to create the review. E.g. - ----- -$ <checkout first commit> -$ <rework> -$ git commit --amend -$ git push origin HEAD:refs/for/master -Counting objects: 5, done. -Delta compression using up to 8 threads. -Compressing objects: 100% (2/2), done. -Writing objects: 100% (3/3), 546 bytes, done. -Total 3 (delta 0), reused 0 (delta 0) -remote: Processing changes: updated: 1, done -remote: -remote: Updated Changes: -remote: http://gerrithost:8080/68 -remote: -To ssh://gerrithost:29418/RecipeBook.git - * [new branch] HEAD -> refs/for/master ----- - -Note that the output is slightly different this time around. Since -we're adding to an existing review it tells us that the change was -updated. - -Having uploaded the reworked commit we can go back into the Gerrit web -interface and look at our change. - -.Reviewing the Rework -image::images/intro-quick-review-2-patches.jpg[Reviewing the Rework] - -If you look closely you'll notice that there are now two patch sets -associated with this change, the initial submission and the rework. -Rather than repeating ourselves lets assume that this time around the -patch is given a +2 score by the code reviewer. - -=== Trying out the Change - -With Gerrit's default work-flow there are two sign-offs, code review -and verify. Verifying means checking that the change actually works. -This would typically be checking that the code compiles, unit tests -pass and similar checks. Really a project can decide how much or -little they want to do here. It's also worth noting that this is only -Gerrit's default work-flow, the verify check can actually be removed -or others added. - -As mentioned in the code review section, verification is typically an -automated process using the -link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[Gerrit Trigger Jenkins Plugin] -or similar. But there are times when the code needs to be manually -verified, or the reviewer needs to check that something actually works -or how it works. Sometimes it's just nice to work through the code in a -development environment rather than the web interface. All of these -involve someone needing to get the change into their development -environment. Gerrit makes this process easy by exposing each change as -a git branch. So all the reviewers need to do is fetch and checkout that -branch from Gerrit and they will have the change. - -We don't even need to think about it that hard, if you look at the -earlier screenshots of the Gerrit Code Review Screen you'll notice a -_download_ command. All we need to do to get the change is copy -paste this command and run it in our Gerrit checkout. - ----- -$ git fetch ssh://gerrithost:29418/RecipeBook refs/changes/68/68/2 -From ssh://gerrithost:29418/RecipeBook - * branch refs/changes/68/68/2 -> FETCH_HEAD -$ git checkout FETCH_HEAD -Note: checking out 'FETCH_HEAD'. - -You are in 'detached HEAD' state. You can look around, make experimental -changes and commit them, and you can discard any commits you make in this -state without impacting any branches by performing another checkout. - -If you want to create a new branch to retain commits you create, you may -do so (now or later) by using -b with the checkout command again. Example: - - git checkout -b new_branch_name - -HEAD is now at d5dacdb... Change to a proper, yeast based pizza dough. ----- - -Easy as that, we now have the change in our working copy to play with. -You might be interested in what the numbers of the refspec mean. - -* The first *68* is the id of the change +mod 100+. The only reason -for this initial number is to reduce the number of files in any given -directory within the git repository. -* The second *68* is the full id of the change. You'll notice this in -the URL of the Gerrit review screen. -* The *2* is the patch-set within the change. In this example we -uploaded some fixes so we want the second patch set rather than the -initial one which the reviewer rejected. - -=== Manually Verifying the Change - -For simplicity we're just going to manually verify the change. -The Verifier may be the same person as the code reviewer or a -different person entirely. It really depends on the size of the -project and what works. If you have Verify permission then when you -click the _Review_ button in the Gerrit web interface you'll be -presented with a verify score. - -.Verifying the Change -image::images/intro-quick-verifying.jpg[Verifying the Change] - -Unlike the code review the verify check doesn't have a +2 or -2 level, -it's either a pass or fail so all we need for the change to be -submitted is a +1 score (and no -1's). - -=== Submitting the Change - -You might have noticed that in the verify screen shot there are two -buttons for submitting the score _Publish Comments_ and _Publish -and Submit_. The publish and submit button is always visible, but will -only work if the change meets the criteria for being submitted (I.e. -has been both verified and code reviewed). So it's a convenience to be -able to post review scores as well as submitting the change by clicking -a single button. If you choose just to publish comments at this point then -the score will be stored but the change won't yet be accepted into the code -base. In this case there will be a _Submit Patch Set X_ button on the -main screen. Just as Code-Review and Verify are different operations -that can be done by different users, Submission is a third operation -that can be limited down to another group of users. - -Clicking the _Publish and Submit_ or _Submit Patch Set X_ button -will merge the change into the main part of the repository so that it -becomes an accepted part of the project. After this anyone fetching -the git repository will receive this change as a part of the master -branch. +. link:intro-user.html[User Guide] +. link:intro-project-owner.html[Project Owner Guide] +. link:https://source.android.com/source/life-of-a-patch[Default Android Workflow] (external) GERRIT ------ @@ -390,3 +37,4 @@ Part of link:index.html[Gerrit Code Review] SEARCHBOX --------- + |