git-annex can store data in git-lfs repositories, using the git-lfs special remote.
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.