Initialiser un dépôt vide sur le serveur
La première étape consiste à créer un dépôt vide sur le serveur centralisé. Sur
monserveur.local, en tant qu’utilisateur matthieu, j’initialise un
dépôt avec l’option --bare
. Cette option signifie qu’il n’y aura que la base
de données de git et non les fichiers de travail. On l’utilise principalement
sur les serveurs car personne n’édite directement les fichiers ici.
git init --bare /home/matthieu/monprojet.git
Je ne traite que la méthode de connexion via SSH. J’installe ma clé publique SSH et je mets en place keychain pour plus de facilité lors des push / pull.
À partir de là, il y a deux solutions. Soit on clone le dépôt, soit notre dépôt local est déjà existant et on va le lier au dépôt sur le serveur afin de pouvoir pousser son contenu.
Première solution : cloner le dépôt
# clone du dépôt distant
git clone [email protected]:/home/matthieu/monprojet.git
cd monprojet/
# on peut travailler sur notre projet
Seconde solution : lier le dépôt
Les sources du projet sont situées sur une autre machine dans un dossier nommé projet, on va initialiser le dépôt local et le lier à celui qu’on a créé sur le serveur.
cd projet/
# initialisation du dépôt local dans le dossier courant
git init
# ajout des sources
git add .
# premier commit
git commit -m "premier commit"
# mise en place du lien vers le dépôt distant
git remote add origin [email protected]:/home/matthieu/monprojet.git
# push vers le dépôt distant
git push --set-upstream origin master
On peut aussi simplement pousser un dépôt local déjà existant vers ce serveur.
On reprend juste les commandes git remote
et git push
.
Empêcher le login en SSH
Sur le serveur, on peut empêcher un utilisateur de se logguer, pour des raisons
de sécurité. En effet, on n’a pas forcément envie que tout le monde puisse
aller fouiner sur le serveur. Pour ce faire, c’est très simple, il suffit de
définir son shell sur git-shell
. Il faut d’abord l’ajouter dans la liste des
shells existants.
# à ne faire qu'une seule fois
sudo bash -c "echo $(which git-shell) >> /etc/shells"
Ensuite, on indique que l’utilisateur doit utiliser ce shell.
# à faire pour chaque utilisateur à restreindre
sudo chsh --shell $(which git-shell) matthieu
À partir de cet instant, l’utilisateur matthieu ne peut plus se connecter en SSH sur le serveur, mais il peut quand même faire des fetch / push / pull / clone.
Utiliser un dépôt à plusieurs
La stratégie constiste à rendre le dépôt utilisable par un groupe d’utilisateurs. Dans le cas où l’on souhaiterait gérer plus finement les droits, pour différents dépôts, il faudra alors créer d’autres groupes, mais le principe reste le même.
# création du groupe gitusers
groupadd gitusers
On ajoute ensuite les différents utilisateurs devant accéder au dépôt dans le groupe gitusers.
usermod -a -G gitusers matthieu
usermod -a -G gitusers paul
usermod -a -G gitusers jacques
On crée ensuite le dépôt dans un endroit accessible, par exemple, /git
.
# création du répertoire /git
sudo mkdir /git
# son propriétaire a tous les droits, le groupe a juste le droit d'y entrer
sudo chmod 710 /git
# on ajoute le setgid sur le répertoire. ainsi, tous les sous répertoires
# seront aussi du groupe gitusers
sudo chmod g+ws /git
# root est le propriétaire, gitusers le groupe
sudo chown root:gitusers /git
# on initialise un dépôt --bare en précisant qu'on le partage via le groupe
sudo git init --bare --shared=group /git/monprojet.git
Les utilisateurs peuvent ensuite faire un clone classique puis travailler ensemble.