Github helped popularize git and its concepts to many. Nevertheless, it involves making public all the codes you want to host, unless you buy a fairly expensive subscription, and for a limited number of projects. Moreover, Github is not open, and it is therefore necessary to give it some trust to store its projects.
Several solutions exist to host a git server on his personal server. For example, Gitlab aims to become equal to Github, with a graphical interface and many tools; thereby, it is very large and relatively heavy for a small server.
Here we will see how to install Gitolite, which provides a very light and functional git server, in order to synchronizing repositories between different working stations.
Installation
Creating git user on the server
First, we will create on the server a git
user, which will be needed:
sudo adduser git
Once connected to git
on the server, we create a bin
directory that will contain binaries, that we then add to the path
:
cd ~
mkdir bin
PATH=$PATH:~/bin
PATH=~/bin:$PATH
Creating an authentication key
In order to connect to Gitolite, we will used SSH key-based authentication, both simpler and more secure than HTTP. If you do not already have a key, it is necessary to create one. For this, we will used ssh-keygen
locally:
cd ~/.ssh
ssh-keygen -t ed25519 -a 100
When the path is requested, enter your username <user>
. The password is optional: if you choose one, it will be asked each time a git command is requesting the server.
We then send the public key on the server:
cat ~/.ssh/<user>.pub | ssh git@<hostname> -p <port> 'umask 0077; mkdir -p .ssh; cat >> <user>.pub'
Finally, we create a ~/.ssh/config
file that contains the following information:
Host git
HostName <hostname>
Port <port>
User git
IdentityFile ~/.ssh/<user>
Installing Gitolite
Back to the user git
on the server, we can now install Gitolite:
cd ~
git clone git://github.com/sitaramc/gitolite
gitolite/install -ln
gitolite setup -pk ~/<user>.pub
Locally, you can now check that everything works well with ssh git
. This should return something like:
PTY allocation request failed on channel 0
hello <user>, this is git@<hostname> running
gitolite3 v3.6.5-9-g490b540 on git 2.1.4
R W gitolite-admin
R W testing
That’s all! Now, if you want to clone a repo
directory, simply run the command git clone git:repo
. The git push
, pull
, fetch
… will operate without password.
Configuration
The main originality of Gitolite is that its configuration system uses a specific git repository. To configure Gitolite, simply clone the gitolite-admin
repository:
git clone git:gitolite-admin
This repository contains a conf/gitolite.conf
file that lists the directories and permissions, and a keydir
folder containing the users public keys (your <user>.pub
key, provided during the installation, is already there).
For example, to add a project
repository, just edit conf/gitolite.conf
to add:
repo project
RW+ = <user>
To apply all changes, commit
then push
those files on the server.