We evaluated a bunch of possible review tools at some point (rietveld, Review Board and gerrit). We would have been happy with rietveld from a user's point of view but we didn't want to ship our source code to AppEngine (and the gae2django project that would allow it to be run on our own server wasn't very mature then). Out of Review Board and gerrit we preferred gerrit.
We liked the gerrit UI and tools (ssh auth and commands over ssh with JSON output are fabulous) but we really didn't like the gerrit workflow.
Gerrit wants to run your main repository and handle the merges into it. The reviewable changes have to be single commits, not branches, so you basically need to rebase your branches for review and merge. (I can understand that, it's kind of nice to review commits as units of change).
How we have been working is that intermediate results are regularly pulled between people and developers are attached to their intermediate commits in their feature branches.
So we use gerrit without the workflow. This comes in two parts: synthetic review commits and merging outside gerrit.
Synthetic review commitsThe commits we push to gerrit are created by doing something like:
branch=$(git rev-parse --abbrev-ref HEAD) git fetch origin git checkout -b gerrit-review origin/master git merge --squash $branch git commit -a ... edit commit message ... git push gerrit HEAD:refs/for/master/$USER-$branch