You have a git-annex repository, and you want to publish the files
in it to the public. One way is to
[[setup_a_public_repository_on_a_web_site]], but perhaps you don't have a
web server that can run git-annex, and you just want to publish the current
files, not the whole git-annex repository.

The [[git-annex export|git-annex-export]] command is the solution. It lets
a tree of files from your git-annex repository be published to Amazon 
[[special_remotes/S3]], as well as other types of special remotes like
[[special_remotes/webdav]] and [[special_remotes/directory]].

# Publishing to Amazon S3

Let's create a bucket in Amazon S3 named $BUCKET and a special remote
named public-s3. Exporting has to be enabled when setting up a special
remote for the first time.

Set up your special [[S3 remote|special_remotes/S3]] with (at least) these options:

	git annex initremote public-s3 type=S3 encryption=none bucket=$BUCKET exporttree=yes public=yes

Be sure to replace $BUCKET with something like 
"public-bucket-joey" when you follow along in your shell.

[[!template id=note text="""
Want to only export files in a subdirectory of the master branch?
Use `master:subdir`. 

Any git treeish can be used with the export command, so you can also
export tags, etc.
"""]]

Then export the files in the master branch to the remote:

	git annex export master --to public-s3

Each exported file will be available to the public at
`http://$BUCKET.s3.amazonaws.com/$FILE`

Note: Bear in mind that Amazon will charge the owner of the bucket
for public downloads from that bucket.

# Using `git-annex sync --content`

So far, the current contents of the master branch have been exported to
public-s3, and to update the export when the branch changes, you have to
remember to run `git annex export` again.

If you use a `git annex sync` workflow, it's useful to configure
it to also export changes to the remote. This is done by setting
the remote's `annex-tracking-branch` configuration:
	
	git config remote.public-s3.annex-tracking-branch master

That tells git-annex that the export should track changes to master.
When you run `git annex sync --content`, it will update all tracking
exports. The git-annex assistant also automatically updates tracking
exports.

Want to only export files in a subdirectory of the master branch?

	git config remote.public-s3.annex-tracking-branch master:subdir

# Amazon S3 indexes

By default, there is no index.html file exported, so if you open
`http://$BUCKET.s3.amazonaws.com/` in a web browser, you'll see an
XML document listing the files.

For a nicer list of files, you can make an index.html file, check it into
git, and export it to the bucket. You'll need to configure the bucket to
use index.html as its index document, as
[explained here](https://stackoverflow.com/questions/27899/is-there-a-way-to-have-index-html-functionality-with-content-hosted-on-s3).

# Old method

To use `git annex export`, you need git-annex version 6.20170909 or
newer. Before we had `git annex export` an [[old_method]] was used instead.
