Hacker News new | past | comments | ask | show | jobs | submit login

Does anyone know what code review system they are using with github?



"We will use a Google-hosted instance of Gerrit for code reviews."



thank you. Missed that in the article (was skimming >_> )


Me too, my brain is wired to read Gerrit as a common Dutch first name, so I thought he was talking about a person named Gerrit.


It is! Gerrit (our new code review system) is named after Gerrit Rietveld (the designer), as it Rietveld (our old code review system).


Hm, I agree that github CR is not good. Glaf they're using Issues though as Github discussions are a _really nice_ way to build software. I personally find Gerrit painful to use, but has critical features, as enneff described. Hope Github really steps up to the plate.

Also, everyone who uses github whould really check out *Sourcegraph's code review stuff. They show you really useful things like:

- exactly what definitions were added/removed/changed (https://sourcegraph.com/github.com/fsouza/go-dockerclient/.p...)

- a diff with jump-to-definition links (https://sourcegraph.com/github.com/fsouza/go-dockerclient/.p...)

- a list of people and projects impacted by the change (https://sourcegraph.com/github.com/fsouza/go-dockerclient/.p...)

Totally gets rid of the "understanding the PR diff" problem others mentioned


I'm curious what Gerrit gets them that Github doesn't have natively, too.


There are a lot of things lacking about GitHub's code review process (pull requests). Off the top of my head:

- Merging a pull request (almost) always creates a merge commit, polluting the change history. Gerrit will automatically rebase the changes atop the master branch head, leaving a nice linear history.

- Pull requests require the contributor to create a public fork of the repository they're committing to. I can see how this works for some people, but I find it gross for each contributor to the Go project to have their own public fork. What a mess.

- Comments on pull requests are sent as soon as they are created. Gerrit allows you to make many comments on a change, as drafts, and then send them all in one go, sending just a single email. This is much easier to manage for a large project.

- Gerrit has the notion of multiple 'patch sets' for a particular change, and you can see diffs between patch sets, so it's much easier to progressively review large changes.

And there are many other small issues with the GitHub pull request process that make it untenable for the Go project.


I'm really curious to give Gerrit a try. Is it like the existing Rietveld system used for Go?

- I've been using the "apply mail" flow to avoid merge commits and to squash commits when appropriate (based on Nathaniel Talbott's post http://blog.spreedly.com/author/ntalbott/#.VGVhz5PF_Zs). It will be nice to have something automatic.

- At least contributors with the commit bit can just create a feature branch and a pull request from there. Some open source projects give out the commit bit almost immediately, but with GitHub there's still that initial fork and pull request to prove oneself.

Interested to see how Gerrit addresses this. GitHub doesn't have any way to disable pull requests. :-(

- I've completely disabled email notifications for this reason. There still can be a huge number of notifications in app or via third-party mobile apps. Rietveld is a lot more sane, I only saw notifications for things I was actively working on.

- I usually end up reviewing just the new commits individually. But that requires figuring out which ones I had already reviewed. Not so bad with only a few branches, but I can see it getting out of hand.

I really hope people from GitHub are reading this thread as they are working to improve their tools. :-)


We're going to build a bot that replies to pull requests to the Go core. It'll say "Sorry, we don't take pull requests, but here's how to use Gerrit [link]. Thanks!"


FYI if you have a "CONTRIBUTING" or "CONTRIBUTING.md" document at the project root, a neat little info bar "Please read the [contributing] guidelines before proceeding" will show up to anyone filing a bug or a PR.


Not to be flippant, but if you are not going to use pull-requests, what is the benefit of moving to Github? Will you use the issue tracking system?

If not then it just seems like switching to git using the present google code host would suffice from a technical viewpoint.


We will use the GitHub issue tracker, which will allow easy cross references between go issues and other projects on github.


I have to agree that not using pull requests is missing out on the best feature of github. It's the social, low-overhead way to contribute to a repo.

It seems like it must be possible to hook up a bot to github that watches for pull requests and submits them to gerrit... the Juju team has a bot that does that for our Reviewboard integration. It won't work for more complicated workflows that github doesn't support, like dependent branches or whatever, but it lowers the barrier of entry for initial contributors that just want to submit a simple fix. And the more advanced users can just submit directly to our Reviewboard instance if they want the more advanced features.

Also, the public fork on Github is actually a feature - it means others can easily see what you're working on. You need off-site storage for your personal work anyway, right? You're not going to keep it local on your laptop, so you'll need a branch somewhere regardless.


GitHub code review is terrible. I don't blame them for not using pull requests in the least. If not being able to pull is enough to stop people from contributing, how much is their contribution worth?


Why even move to github then?


I think this is a great move. Also, very similar to the setup used for the OpenStack (http://openstack.org/) project. All reviews done in Gerrit, published to Github when merged. OpenStack also has the bot which closes GitHub pull requests and redirecting to Gerrit. More on their Gerrit/Github integration here: http://ci.openstack.org/gerrit.html For those interested in doing the same for their own, private projects, there is http://forj.io (full disclaimer, I work on this project). Finally, Gerrit now has an async / TTY based client which works offline (reviews on the go!) with Gertty - https://github.com/stackforge/gertty


Smart!


Gerrit is a Rietveld fork, see http://en.wikipedia.org/wiki/Gerrit_(software).


> Pull requests require the contributor to create a public fork of the repository they're committing to.

You can create Pull Requests within a repository. You don't need to fork the repository if you have push access.


Go contributors will not be pushing to the GitHub repository, nor will have direct commit access to the Gerrit hosted git repository.


Nice summary; thank you. I don't know why people put up with the merge commit pollution. Great to see Go taking the best of both worlds.


With git and github you can have the best of both worlds. merge commits (seperate tree), linearized at the end (--no-ff) or rebased commits (pull --rebase).

1 and 3 have their usecases, 3 is esp. useful if the branch contains only 1-2 commits, and 1 is useful if the branch contains > 10. You can add test information into the merge commit.

I hope github will take more gerrit features into their tracker or allow tracker extensions, so that we can live with github alone. gerrit still is a UI and performance nightmare.


The merge history is the true one, it's what you want when browsing backwards to see how particular things changed. Rebase creates fake commits corresponding to a tree that never actually existed anywhere. Your history viewer should be able to linearize the tree for you if you want, but the canonical history in the repository should be the true one.


That's just one workflow.

For Go, we will require that contributors (everyone working on Go) prepare their commit at head (or at least make the commit able to be automatically rebased). It makes no sense to have a merge commit for every single commit. That would add no extra information and double the size of the commit log.


It's not a merge commit for every single commit, only for every, well, merge. I sure hope people are writing new features or bugfixes in several commits, not just doing days of work and committing at the end (though I guess that would be a workflow for people who are worried about the size of the commit log).

What's the purpose of keeping a commit history at all? Really, what are your use cases? For me, the history is for looking around and understanding a particular change, or for bisecting to help understand a bug. Both of these use cases are better supported by seeing the tree as it actually was when someone was working on it, than by seeing an artificial, rebased history. What's your use case where the rebased version makes sense?


This is a fantastic answer on Github's (rare) shortcomings. I hope the Github team is here reading this and taking notes!


Go team member here.

I've used five different code review tools, and Github is the worst of the five. I regularly bug them (Github) about this, and they know it. I hear rumors they've been working on it a lot.

Github's review mechanisms barely scratch the surface of what's possible.


Have you ever, by coincidence, used Phabricator? If so, what's your opinion of it? I've used Phabricator full-time for a while and it's been really a joy.


If any of the other ones are public, which did you like best? IIRC, Mondrian was good, but not great.


From best to worse, in my experience:

1) Google's current internal one

2) Gerrit (open source, to be used by Go)

3) Google's old one (Mondrian)

4) Rietveld (open source, but run for free at codereview.appspot.com)

5) Github

I would totally suspect that Phabricator or Review Board would be well above Github (as are 1-4 in my list), but I don't know where. I have little desire to use or explore new code review systems at this point. Four per day is enough for me at the moment.


In case you do want to try out another one at some point, I built https://reviewable.io to take some of my favorite features from Google's internal tool but integrate seamlessly with GitHub.


Review Board isn't as good as it could be. Sometimes it's diffing tool provides far too much noise to be useful.


Mondrian is the best code review tool I've ever used, but I'll admit that could be damning with faint praise... I'm very curious to hear what the better options are, because we use Github at my current company and I would go back to Mondrian in a heartbeat.


I used to work at a company that did 100% of code reviews on gerrit, and by 100% I mean we had a requirement all commits be approved so I spent a lot of time in gerrit.

then I moved to company that uses github. it's really a big shift. GitHub is not as intuitive and It has a long learning curve. a lot of it was time needed to adjust but I really miss gerrit.

gerrit makes it so clear what commits need reviews. in github it's just a list of pull requests. did I comment already? does this need approval? is this already approved by someone else? who? all of these are difficult to see in github but instantly obvious in gerrit.

then at the code level, gerrit uses my whole browser window so on a 30in I can side by side diff any file. GitHub has a tiny viewport and I'm constantly scrolling. it's not streamlined for reading at all and once 5+ comments are there you can give up on reading the code. gerrit has an upper limit on comments too before the ui overwhelms the code but it's way higher.

I think gerrits tools for viewing more lines are better, although phabricators are good. gerrit gives me a copy and paste link to check out exactly the code I am looking at.

and I really enjoy the patch set system over additional commits. it's a lot clearer in a back and forth setting to see code evolve over time and digging patches without making entirely new commits.

gerrit has built in support for automated and human reviews to leave separate scores. aka, you have to pass the tests and get approval. this doesn't exist in GitHub.

extending gerrit with hooks was crucial to our workflow. luckily github delivers there, but as gerrit is open source you can do more to extend it. especially on the ui side.

I have to admit at first I was blown away how weak github is compared to gerrit. I could not understand why it's so popular. now after about a year on github I get it, I get why it's popular, but is still years behind gerrit.


Github is simple and good enough for vast majority of users. Gerrit UI sucks. I really cannot express how much I hate it, and how broken and counter-intuitive it is, after working with github. For new users its just unusable. If github would try to impose it on its users, they'd loose 99% of contributions.


The key features for me are:

1) The ability to have multiple reviewers, who can provide both human-readable input ("fix this") and machine-readable input ("Code Review +2"). This becomes powerful when you require a couple things to submit, code review and verification that the change works. A TryBot or something can automatically +1 the Verified bit when the tests pass, and the reviewer can +2 the Code Review bit on the assumption that the code compiles and the tests pass. Requiring both makes review easier and the repository less likely to break. Sounds like extra bureaucracy, but it's actually really wonderful.

2) Pushing the onus of merging and submitting to the author, instead of the reviewer. I can say "looks good, fix the merge conflicts" and be done with the review. With Github, the repository owner has to do the merge (or push back and re-review; I pick doing it myself).

Github's code review tool is really aimed at accepting or rejecting; not improving. At least how I use it, anyway.


- GitHub doesn't show you what changed in a PR from the last time you looked at it. You can look through the individual commits, but this can be painful if there's a lot of them, and can easily become impossible if the code was merged, rebased, or squashed.

- GitHub sends each comment individually, encouraging "shotgun commenting" instead of a coherent set on the sender side, and leaving the receiver to deal with dozens of individual emails.

- GitHub attaches line comments to the deltas, which makes the comments disappear if the underlying code changes. This makes it easy to "lose" a comment during a review, and forget to check that something was fixed properly. Even if a comment survives, GitHub doesn't track (non-) resolution in any way, so it's still easy to forget to take care of stuff.

- You can't customize things: can't pick your favorite source code font, the wrapping margin, syntax highlighting colors (as it doesn't have syntax highlighting at all), links that open your editor directly on the correct line, etc.

As it happens, https://reviewable.io fixes all these, and has a much lighter-weight integration with GitHub than Gerrit does, not to mention a much friendlier UI. And yeah, it's my own project so I'm obviously biased, but check it out if you're annoyed with GitHub's code reviews but Gerrit/Phabricator are too heavy for your needs.


GitHub has the network effect of so many existing repos, but I personally think the issues & code review tools are mediocre at best.


Gerrit works well for a project that has many different repositories, as you can do code review all in one screen.

I did some CyanogenMod development and I really liked gerrit, albeit its poor performance on Firefox (client side app that had weird JS freezes in fx only..)


They say it's Gerrit





Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: