Gerrit2 Git Replication
=======================

Gerrit can automatically push any changes it makes to its local Git
repositories to another system.  Usually this would be configured
to provide mirroring of changes, for warm-standby backups or a
load-balanced public mirror farm.

Typically replication should be done over SSH, with a passwordless
public/private key pair.  On a trusted network it is also possible to
use replication over the insecure (but much faster) git:// protocol,
by enabling the `receive-pack` service on the receiving system.

To enable push replication, create `$\{site_path\}/replication.config`
as a Git-style config file, then restart Gerrit.

Currently the replication runs on a 15 second delay.  This gives
Gerrit a short time window to batch updates going to the same
project, such as when a user uploads multiple changes at once.

An example configuration file to replicate in parallel to four
different hosts follows:

====
  [remote "host-one"]
    url = gerrit2@host-one.example.com:/some/path/${name}.git
    # push defaults to +refs/*:refs/*

  [remote "pubmirror"]
    url = mirror1.us.some.org:/pub/git/${name}.git
    url = mirror2.us.some.org:/pub/git/${name}.git
    url = mirror3.us.some.org:/pub/git/${name}.git
    push = +refs/heads/*
    push = +refs/tags/*
====

Within each url value the magic placeholder `$\{name}` is replaced
with the Gerrit project name.  This is a Gerrit specific extension
to the Git URL syntax.

Multiple URLs may be specified within a single remote block,
listing different destinations which share the same settings.

Most standard Git remote configuration settings can be used within
a remote block.  The `receivepack` option can be used to specify
the remote path to the `git-receive-pack` executable, if it is
not in the remote user's `PATH` by default.

One or more `push` entries may also be specified within a remote
block to select a subset of the refs for replication.  If no push
values are configured, a default of `+refs/\*:refs/*` is used.

As the above configuration uses SSH for both connections it also
relies upon having a `~/.ssh/config` file setup for the user
running Gerrit.  A matching configuration file might be:

====
  Host host-one.example.com:
    IdentityFile ~/.ssh/id_hostone
    PreferredAuthentications publickey
    BatchMode yes

  Host mirror*.us.some.org:
    User mirror-updater
    IdentityFile ~/.ssh/id_pubmirror
    PreferredAuthentications publickey
    BatchMode yes
====

Most (but not all) SSH options are honored:

 * Host
 * Hostname
 * User
 * Port
 * IdentityFile
 * PreferredAuthentications
 * BatchMode

SSH authentication must be by passwordless public key, as there is
no facility to read passphases on startup or passwords during the
SSH connection setup.

Make sure you are replicating to a standard Git daemon or SSH
daemon, and not to another Gerrit's internal SSHD.
