This tutorial shows how to set up a centralized repository hosted on GitLab.

Since GitLab has added support for git-annex on their servers, you can store your large files on GitLab, quite easily.

Note that as I'm writing this, GitLab is providing this service for free, and will store up to 10 gb per project.

create the repository

Go to and sign up for an account, and create the repository there. Take note of the SSH clone url for the repository, which will be something like

We want to clone this locally, on your laptop. (If the clone fails, you need to generate a ssh key and add it to GitLab.)

# git clone
# cd annex

Tell git-annex to use the repository, and describe where this clone is located:

# git annex init 'my laptop'
init my laptop ok

Add some files, obtained however.

# git annex add *.mp4
add Haskell_Amuse_Bouche-b9OVqxmI.mp4 (checksum) ok
(Recording state in git...)
# git commit -m "added a video. I have not watched it yet but it sounds interesting"

Feel free to rename the files, etc, using normal git commands:

# git mv Haskell_Amuse_Bouche-b9OVqxmI.mp4 Haskell_Amuse_Bouche.mp4
# git commit -m 'better filenames'

push to GitLab

Now make a first push to the GitLab repository. As well as pushing the master branch, remember to push the git-annex branch, which is used to track the file contents.

# git push origin master git-annex
 * [new branch]      master -> master
 * [new branch]      git-annex -> git-annex

That push went fast, because it didn't upload the large file contents yet.

So, to finish up, tell git-annex to sync all the data in the repository to GitLab:

# git annex sync --content

make more checkouts

So far you have a central repository on GitLab, and a checkout on a laptop. Let's make another checkout elsewhere. Clone the central repository as before. (If the clone fails, you need to generate a ssh key and add it to GitLab.)

elsewhere# git clone
elsewhere# cd annex

Notice that your clone does not have the contents of any of the files yet. If you run ls, you'll see broken symlinks. It's easy to download them from GitLab either by running git annex sync --content, or by asking git-annex to download individual files:

# git annex get Haskell_Amuse_Bouche.mp4
get Haskell_Amuse_Bouche.mp4 (from origin...)
12877824   2%  255.11kB/s    00:00