We've seen above that git-annex can be used to store files in
regular git remotes, accessed either via ssh, or on a removable drive. But
git-annex can also store files in Amazon S3, Glacier, on a rsync server, in
WebDAV, or even pull files down from the web and bittorrent.
This and much more is made possible by [[special_remotes]].

These are not normal git repositories; indeed the git repository is not
stored on a special remote. But git-annex can store the contents of files
in special remotes, and operate on them much as it would on any other
remote. Bonus: Files stored on special remotes can easily be
[[encrypted|encryption]]!

All you need to get started using a special remote is to initialize it.
This is done using the `git annex initremote` command, which needs to be
passed different parameters depending on the type of special remote.

Some special remotes also need things like passwords to be set in
environment variables. Don't worry -- it will prompt if you leave anything off.
So feel free to make any kind of special remote instead of the S3 remote
used in this example.

	# export AWS_ACCESS_KEY_ID="somethingotherthanthis"
	# export AWS_SECRET_ACCESS_KEY="s3kr1t"
	# git annex initremote mys3 type=S3 chunk=1MiB encryption=shared
	initremote mys3 (shared encryption) (checking bucket) (creating bucket in US) ok

Now you can store files on the newly initialized special remote.

	# git annex copy my_cool_big_file --to mys3
	copy my_cool_big_file (to mys3...) ok

Once you've initialized a special remote in one repository, you can enable
use of the same special remote in other clones of the repository.
If the mys3 remote above was initialized on your laptop, you'll also want
to enable it on your desktop.

To do so, first get git-annex in sync (so it knows about
the special remote that was added in the other repository), and then
use `git annex enableremote`.

	desktop# git annex sync
	desktop# export AWS_ACCESS_KEY_ID="somethingotherthanthis"
	desktop# export AWS_SECRET_ACCESS_KEY="s3kr1t"
	desktop# git annex enableremote mys3
	enableremote mys3 (checking bucket) ok

And now you can download files from the special remote:

	desktop# git annex get my_cool_big_file --from mys3
	get my_cool_big_file (from mys3...) ok

This has only scratched the surface of what can be done with
[[special_remotes]].
