This special remote type rsyncs file contents to somewhere else.

Setup example:

# git annex initremote myrsync type=rsync rsyncurl=rsync:// encryption=shared
# git annex describe myrsync "rsync server"

Or for using rsync over SSH

# git annex initremote myrsync type=rsync encryption=shared
# git annex describe myrsync "rsync server"


These parameters can be passed to git annex initremote to configure rsync:

  • rsyncurl - Required. This is the url or hostname:/directory to pass to rsync to tell it where to store content.

  • encryption - One of "none", "hybrid", "shared", or "pubkey". See encryption.

  • keyid - Specifies the gpg key to use for encryption.

  • exporttree - Set to "yes" to make this special remote usable by git-annex-export. It will not be usable as a general-purpose special remote.

  • shellescape - Optional. This has no effect when using rsync 3.2.4 or newer. Set to "no" to avoid shell escaping normally done when using older versions of rsync over ssh. That escaping is needed with typical setups, but not with some hosting providers that do not expose rsynced filenames to the shell. You'll know you need this option if git annex get from the special remote fails with an error message containing a single quote (') character. If that happens, you can run enableremote setting shellescape=no.

  • chunk - Enables chunking when storing large files.
    This is typically not a win for rsync, so no need to enable it. But, it makes this interoperate with the directory special remote.

The git configuration setting can be used to pass parameters to rsync. To pass parameters to rsync only when it's downloading and uploading, use and


You can use the git configuration setting to choose whether we run rsync over ssh or rsh. This setting is also used to specify parameters that git annex will pass to ssh/rsh.

ssh is the default transport; if you'd like to run rsync over rsh:

git config rsh

To pass parameters to ssh/rsh, include the parameters after "rsh" or "ssh". For example, to configure ssh to use the private key at /path/to/private/key:

git config "ssh -i /path/to/private/key"