Gerrit vs GitHub Pull Request
- Gerrit accepts one patch at a time. The CI will once run for each patch, lengthening the total test time.
- Since each patch must pass CI, complex changes must either:
- be broken into smaller incremental patches which takes more time to develop and test, or
- be submitted as a single large patch which makes it more difficult to review.
- If there's a problem in a patch, the patch must be revised and resubmitted. Other patches that depend on it may need to be rebased. Each of these operations require a separate CI execution, lengthening the total time.
- Gerrit requires Jenkins to create a test branch for Travis.
- When multiple patches are submitted at once, often times one of the Jenkins job will fail.
- Travis requires a second stage job to send the result to Gerrit.
- Jenkins service must be maintained, and can become a single point of failure.
- Gerrit has a bug which makes it difficult to scroll the screen when there are many files changed (fixed in the new UI).
- Gerrit service is not very reliable. Sometimes it's not available. Sometimes it requires you to relogin (the new UI seems to be more stable).
- Gerrit is configured to push automatically to GitHub, which is adding some risks.
- If a Travis job fails due to system error (indicated by red exclamation point), Jenkins is unable to detect this and report the failure in Gerrit.
GitHub Pull Request
- GitHub PR accepts multiple patches at once. The CI will run once for all patches submitted together, shortening the total test time.
- Since the CI will run only once for all patches submitted together, complex changes can be broken down in a way that is easier to review, without a concern about individually passing the CI.
- If there's a problem in a patch, an additional patch can be submitted without rebasing anything.
- GitHub PR does not require Jenkins.
- GitHub PR does not require a second stage job to send the result.
- GitHub PR can be merged with a merge commit, squashed, or rebased and pushed individually.
- GitHub is generally more reliable than Gerrit.
- GitHub requires contributors to fork the repo and submit the PR via web, but this is a common procedure in many GitHub-based projects.