## Code Review for Git

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

[git]: http://git-scm.com/

|||---||| 2,2,2,3,:1,2
![diffy the kung fu review cuckoo](images/diffy100.png)

### Discuss code

and boost your team's code fu by talking about specifics.

### Serve Git

as an integrated experience within the larger code review flow.

### Manage workflows

with deeply integrated and delegatable access controls.

*** promo

## Download

[Gerrit 2.14.1][download]

***

|||---|||

## Discuss code

Read old and new versions of files with syntax highlighting and
colored differences.  Discuss specific sections with others to make
the right changes.

![side-by-side compare](images/sbs.png)

## Manage and serve Git repositories

Gerrit includes Git-enabled SSH and HTTPS servers compatible with all
Git clients.  Simplify management by hosting many Git repositories
together.

|||---||| 6,2,4

#### Navigate projects

![project list](images/project-list.png)

#### Control access

![access panel](images/access.png)

#### Update branches

![branch list](images/branches.png)
|||---|||

Schedule [git gc] over all managed repositories and [replicate] to
geographical mirrors for latency reduction and backup servers for hot
spare redundancy.

## Extensible through plugins

Gerrit Code Review can be extended and further customized by installing
[server-side plugins][plugins]. Source code for additional plugins
can be found through the [project listing](https://gerrit.googlesource.com/plugins/).

## Get in touch

|||---||| 2,2,2,:4,2

### Mailing list

[repo-discuss](https://groups.google.com/group/repo-discuss)

### Social media

[![Google+](https://ssl.gstatic.com/images/icons/gplus-32.png)](https://plus.google.com/communities/111271594706618791655)

[![Twitter](https://www.gerritforge.com/images/Twitter_Logo_Blue.png)](https://twitter.com/gerritreview)

### IRC

[freenode](https://freenode.net/) #gerrit

[Channel log](http://echelog.com/logs/browse/gerrit/)

|||---|||

[download]: /releases/2.14.md
[git gc]: https://gerrit-documentation.storage.googleapis.com/Documentation/2.14.1/config-gerrit.html#gc
[plugins]: https://gerrit-documentation.storage.googleapis.com/Documentation/2.14.1/config-plugins.html
[replicate]: https://gerrit.googlesource.com/plugins/replication/+doc/master/src/main/resources/Documentation/config.md
