Gitolite is a git repository
manager. Here's how to add git-annex support to gitolite, so you can
git annex copy
files to a gitolite repository, and git annex get
files from it.
A nice feature of using gitolite with git-annex is that users can be given
read-only access to a repository, and this allows them to git annex get
file contents, but not change anything.
First, you need new enough versions:
- the current
master
branch of gitolite works with git-annex (tested 2014-04-19), but v3.5.3 and earlier v3.x require use of thegit-annex
branch. - gitolite 2.2 also works -- this version contains a git-annex-shell ADC and supports "ua" ADCs.
- git-annex 3.20111016 or newer needs to be installed on the gitolite server. Don't install an older version, it wouldn't be secure!
Instructions for gitolite master
branch
To setup gitolite to work with git-annex, you can follow the instructions on the gitolite website,
and just add 'git-annex-shell ua',
to the ENABLE list in ~/.gitolite.rc
.
Here are more detailed instructions:
1: Create a git
user
sudo adduser \ --system \ --shell /bin/bash \ --gecos 'git version control' \ --group \ --disabled-password \ --home /home/git git
2: Copy a public SSH key for the user you want to be the gitolite administrator.
In the instructions below, I placed the key in a file named /home/git/me.pub
.
3: Clone and install gitolite
First switch to the git
user (e.g. sudo su - git
) and then run:
cd git clone https://github.com/sitaramc/gitolite.git mkdir -p bin ./gitolite/install -ln
4: Add ~/bin
to PATH
Make sure that ~/bin
is in the PATH
, since that's where gitolite installed its binary. Do something like this:
echo 'export PATH=/home/git/bin:$PATH' >> .profile export PATH=/home/git/bin:$PATH
5: Configure gitolite
Edit ~/.gitolite.rc
to enable the git-annex-shell command.
Find the ENABLE
list and add this line in there somewhere:
'git-annex-shell ua',
Now run gitolite's setup:
gitolite setup -pk me.pub rm me.pub
Instructions for gitolite 2.2
And here's how to set it up. The examples are for gitolite as installed on Debian with apt-get, but the changes described can be made to any gitolite installation, just with different paths.
Set $GL_ADC_PATH
in .gitolite.rc
, if you have not already done so.
echo '$GL_ADC_PATH = "/usr/local/lib/gitolite/adc/";' >>~gitolite/.gitolite.rc
Make the ADC directory, and a "ua" subdirectory.
mkdir -p /usr/local/lib/gitolite/adc/ua
Install the git-annex-shell ADC into the "ua" subdirectory from the gitolie repository.
cd /usr/local/lib/gitolite/adc/ua/ cp gitolite/contrib/adc/git-annex-shell .
Now all gitolite repositories can be used with git-annex just as any ssh remote normally would be used. For example:
# git clone gitolite@localhost:testing Cloning into testing... Receiving objects: 100% (18/18), done. # cd testing # git annex init init ok # cp /etc/passwd my-cool-big-file # git annex add my-cool-big-file add my-cool-big-file ok (Recording state in git...) # git commit -m added [master d36c8b4] added 1 files changed, 1 insertions(+), 0 deletions(-) create mode 120000 my-cool-big-file # git push --all Counting objects: 17, done. Delta compression using up to 2 threads. Compressing objects: 100% (12/12), done. Writing objects: 100% (14/14), 1.39 KiB, done. Total 14 (delta 0), reused 1 (delta 0) To gitolite@localhost:testing c552a38..db4653e git-annex -> git-annex 29cd204..d36c8b4 master -> master # git annex copy --to origin copy my-cool-big-file (checking origin...) (to origin...) WORM-s2502-m1318875140--my-cool-big-file 2502 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1) sent 2606 bytes received 31 bytes 1758.00 bytes/sec total size is 2502 speedup is 0.95 ok
Troubleshooting
I got an error like this when setting up gitolite after setting up a local git repo and git annex:
git-annex-shell: First run: git-annex init Command ssh ["git@git.example.com","git-annex-shell 'configlist' '/~/myrepo.git'"] failed; exit code 1
because I forgot to "git push --all" after adding the new gitolite remote.