git-annex can store data in [git-lfs](https://git-lfs.github.com/)
repositories, using the [[git-lfs special remote|special_remotes/git-lfs]].

You do not need the git-lfs program installed to use it, just a recent
enough version of git-annex.

## getting started

Here's how to initialize a git-lfs special remote on Github.

	git annex initremote lfs type=git-lfs encryption=none url=https://github.com/yourname/yourrepo

In this example, the remote will not be encrypted, so anyone who can access
it can see its contents. It is possible to encrypt everything stored in a
git-lfs remote, see [[fully_encrypted_git_repositories_with_gcrypt]].

Once the git-lfs remote is set up, git-annex can store and retrieve
content in the usual ways:

	git annex copy * --to lfs
	git annex get --from lfs

But, git-annex **cannot delete anything** from a git-lfs special remote,
because the protocol does not support deletion.

A git-lfs special remote also functions as a regular git remote. You can
use things like `git push` and `git pull` with it.

## enabling existing git-lfs special remotes

There are two different ways to enable a git-lfs special 
remote in another clone of the repository.

Of course, you can use `git annex enableremote` to enable a git-lfs special
remote, the same as you would enable any other special remote.
Eg, for the "lfs" remote initialized above:

	git annex enableremote lfs

But perhaps more simply, if git-annex sees a git remote that matches
the url that was provided to initremote earlier, it will *automatically*
enable that git remote as a git-lfs special remote.

So you can just git clone from the url, and the "origin" remote will be
automatically used as a git-lfs special remote.

	git clone https://github.com/yourname/yourrepo
	cd yourrepo
	git-annex get --from origin

Nice and simple, and much the same as git-annex handles its regular
remotes.

(Note that git-annex versions 7.20191115 and older didn't remember the url
privided to initremote, so you'll need to pass the url= parameter
to enableremote in that case. Newer versions of git-annex will then
remember the url.)

## multiple urls

Often there are multiple urls that can access the same git repository.
You can set up git-lfs remotes for each url. For example,
to add a remote accessing the github repository over ssh:

	git annex initremote lfs-http --sameas=lfs url=git@github.com:yourname/yourrepo.git

The `--sameas` parameter tells git-annex that this is the same as the "lfs"
repository, so it will understand that anything it stores in one remote can
be accessed also with the other remote.
