# What is Gerrit Code Review?

Gerrit provides web based code review and repository management
for the Git version control system.

If you are new to Gerrit, you may read a
[Quick Introduction](https://gerrit-review.googlesource.com/Documentation/intro-quick.html)
directly from the Google-hosted documentation Gerrit web-site:

> 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.

# What is Gerrit Virtual User Summit?

Gerrit Virtual User Summit is **the** event for everything related
to the Gerrit Code Review Community.

The Gerrit Virtual User Summit is the place where all of major Gerrit users
annually meet and exchange experiences and practices that foster the
community with new and useful ideas.

This year the summit will only take place virtually online,
because of the [COVID-19 pandemic](https://en.wikipedia.org/wiki/COVID-19) and
the travelling restrictions.

## Gerrit Community in Numbers

Thanks to the [Gerrit Analytics platform](https://analytics.gerrithub.io)
contributed by GerritForge to the project, we have from this year some real
numbers about the project, automatically extracted from the Git commits and
reviews on Gerrit.

* 13+ years of activity
* 19 events in USA, UK, Germany and Sweden
* 940+ contributors worldwide coming from 280+ organisations
* 270 releases
* 180+ [repositories](https://gerrit.googlesource.com/)
* 160 [plugins](https://www.gerritcodereview.com/plugins.html)
* 53k+ commits
