The workflow defines a process for using with Google’s Gerrit project. It is excellent in a number of ways! If you are using Git at your company and want to have a nice code review process as well as a way to verify and have a few more checks and balances, this is an amazing tool that Google has provided open source. I did make a few customizations to the tool in order to better suite our needs within the company and maybe I will share those once I get some more free time.
The idea with the following workflow is to show you a developer process from beginning to the end of a feature using Gerrit. We are not using Repo which is a Google developed tool to work with Git and Gerrit. We are using straight out of the box Git with Gerrit. In our company we have a few proprietary development build processes but I try to call those out in the workflow so that you can tell how it could be adapted to your company or open source project.
- Implement feature
- Commit changes. Commit as many times as you want to the topic branch.
- Get latest code frequently and especially before you push.
- Fix Merge Conflicts
- Compile the code
- Validate the code (This means running your unit tests, integration tests, a subset of all the selenium tests, etc.)
- Prepare a single commit for code review by squashing your commits
- Create another local branch
- Merge squash your topic branch into your topicForCodeReview branch
- The squash leaves the changes in your topicForCodeReview branch in the staged state. You’ll need to fire up git gui and commit them to that branch.
- Push for code review
- Fix any merge issues using git mergetool if necessary.
- Note: If you choose not to squash before pushing for code review, every commit will get a separate code review!! This is not recommended.
//Create topic branch off of master
git checkout -b topic origin/master
//'''Do *NOT*''' commit after you do the merge
git rebase --continue
//This is an internal shortcut for us to do a full compile just like the integration hudson builds
//You really want to be able to replicate exactly what the integration machines are doing and
//make it as easy as possible.
git checkout -b topicForCodeReview origin/master
git merge --squash topic
git push for-code-review
You will need to setup the git config a certain way in order to be able to pull off this workflow. Pretty trivial changes though, so don’t worry to much yet
- Set rebase to always
- Set up the shortcut for “for-code-review”
rebase = always
url = <main git uploading repository location>
push = HEAD:refs/for/master