Nous allons traiter l’installation et l’utilisation basique du gestionnaire de versions git.
Pour commencer, nous réaliserons les manipulations à faire côté serveur pour installer et configurer notre premier dépôt. Nous verrons par la suite, comment récupérer ce dépôt sur notre ordinateur. Et enfin, nous terminerons par la présentation des manipulations de base en réalisant avec un parallèle à Subversion un autre gestionnaire de versions.
Installation du serveur git
Installation et configuration
L’installation du paquet se fait tout simplement avec la commande suivante.
apt install git
Nous allons maintenant créer un utilisateur dédié à la gestion des dépôts. Pour le mot de passe de cet utilisateur, deux choix s’offrent à vous. Soit vous renseignez un mot de passe long très compliqué auquel cas il faudra copier la clé SSH de votre ordinateur, soit choisissez quelque chose de plus “simple” et vous devrez renseigner ce mot de passe manuellement à chaque échange avec le serveur.
adduser git
Maintenant que l’utilisateur est créé, nous allons faire un peu de sécurité en limitant ses commandes aux simples commandes pour la gestion d’un dépôt git. Commencez, par déterminer le chemin du binaire git-shell.
which git-shell
Éditez ensuite le fichier /etc/password pour modifier le binaire utilisé par l’utilisateur git.
La ligne devrait ressembler à quelque chose comme ceci :
git:x:1004:1005:,,,:/home/git:/usr/bin/git-shell
Copier votre clé SSH
Comme expliqué précédemment, vous pouvez passer cette étape si vous souhaitez entre le mot de passe manuellement. Dans le cas contraire, voici la procédure pour copier votre clé SSH sans utiliser la commande ssh-copy-id.
En effet, dans l’étape précédente, nous avons limité les commandes de l’utilisateur git. Par conséquent, nous ne pouvons plus copier notre clé SSH autrement qu’en éditant le fichier à l’aide d’un autre utilisateur.
Si le dossier /home/git/.ssh n’existe pas déjà, commencez par le créer et lui attribuer les bons droits :
mkdir /home/git/.ssh/ chown -R git: /home/git/.ssh/ chmod 700 /home/git/.ssh/
Ajoutez votre clé, en éditant le fichier authorized_keys et en copiant votre clé publique.
nano /home/git/.ssh/authorized_keys
Pour mémoire votre clé SSH publique est stockée dans le fichier “*.pub” du dossier .ssh de votre compte utilisateur. Vous pouvez utiliser la commande ci-dessous pour l’afficher et copier-coller votre mot de passe.
cat /home/foxinou/.ssh/id_rsa.pub
Création d’un dépot
Nous allons créer un script qui va automatiser la création d’un dépôt sur le serveur en exécutant les quelques commandes de base.
nano /home/git/create.sh
Copiez le contenu ci-dessous puis enregistrez-le.
#!/bin/sh cd /data/git/ if [ "$#" -ne 1 ]; then echo "Usage: $0 DIRECTORY" >&2 exit 1 fi if [ -d "/data/git/$1.git" ]; then echo "$1: Already exists" >&2 exit 1 fi mkdir "$1.git" if [ "$?" -ne 0 ]; then echo "Can't create directory" >&2 exit 1 fi cd "$1.git" git --bare init chown -R git: "/data/git/$1.git/"
Ajoutez le droit d’exécution du script shell.
chmod +x /home/git/create.sh
Pour créer un nouveau dépôt git, vous devez utiliser la commande ci-dessous en lui passant comme paramètre le nom du dépôt (sans l’extension “.git”).
sh /home/git/create.sh mondepot
Le script se chargera de créer un dossier /home/git/mondepot.git et d’initialiser tout le nécessaire.
Faire un clone du dépôt git sur votre ordinateur
Maintenant que tout est bien configuré, nous allons voir comment récupérer le dépôt sur votre ordinateur grâce à la commande ci-dessous.
git clone git@xx.xx.xx.xx:/home/git/mondepot.git
Pensez bien entendu à remplacer xx.xx.xx.xx par l’adresse ip ou le nom de domaine de votre serveur.
Connecter deux dépôts créés indépendamment
Admettons que vous avez créé un dépôt git vide sur votre serveur, et que vous souhaitez envoyer les données d’un dépôt présent sur votre ordinateur. C’est le cas par exemple lorsque vous utilisez composer pour créer un projet Lumen.
La commande ci-dessous va permettre d’ajouter une source externe à votre dépôt local de façon à “push” les données vers le dépôt distant.
git remote add origin git@xx.xx.xx.xx:/home/git/mondepot.git
Cas d’un port SSH différent du numéro 22
Si vous avez changé le numéro de port SSH de votre serveur, vous allez pouvoir utiliser les commandes ci-dessous en les modifiants un peu.
Dans le cas du clone, il faut définir le protocole et le port comme ceci :
git clone ssh://git@xx.xx.xx.xx:22222/home/git/mondepot.git
Dans le cas de l’ajout d’une source distante, il faut faire la même chose que ci-dessus :
git remote add origin ssh://git@xx.xx.xx.xx:22222/home/git/mondepot.git
Manipulations de base de git
Pour cette section, nous allons faire un parallèle avec Subversion un autre gestionnaire de version. Si je fais ce parallèle, c’est aider ceux qui comme moi étaient habitué à SVN et qui sont confrontés au changement de philosophie qu’impose git.
Commencez par entrer dans votre dossier de projet.
cd mondepot
Mettre à jour son dépôt
Pour commencer, nous allons mettre à jour en récupérant les modifications sur le serveur. Pour SVN, il s’agissait de faire un “update” or ici la commande est “pull”.
git pull
Envoyer ses modifications
Maintenant créons un dossier puis un fichier que nous allons envoyer au dépôt serveur.
mkdir docs touch docs/todo
Sous SVN, pour envoyer un fichier vous deviez simplement faire un “add” du fichier pour que le gestionnaire surveille ses modifications. Lorsqu’il était modifié, vous deviez faire un “commit” pour l’envoyer au serveur.
Avec git, la philosophie est légèrement différente car avant chaque “commit”, vous allez devoir utiliser la commande “add”. L’objectif de ce fonctionnement est de permettre le réduire un “commit” à seulement quelques lignes ou fichiers. Ainsi le commentaire que vous renseignerez sera en rapport avec ces fichiers et vous arriverez plus facilement à parcourir l’historique des modifications d’un projet.
Pour connaître les fichiers qui seront inclus dans ce “commit”, vous pouvez utiliser la commande suivante :
git status
Cette commande vous indiquera que notre fichier todo sera “ignoré du ‘commit'”. Nous allons donc l’ajouter avec la commande ci-dessous :
git add docs/todo
Lorsque vous avez trop de fichier et que vous ne souhaitez pas trop respecter ce principe de “un commit par fichier”, vous avez la possibilité de faire la commande comme ci-dessous qui va ajouter toutes les modifications de tous les fichiers.
git add .
Maintenant, en regardant avec la commande git status, vous verrez que votre fichier sera prit dans le “commit”.
git commit
La commande ci-dessus va vous ouvrir un éditeur pour taper un commentaire sur l’envoi. Une fois validé vous verrez que l’enregistrement est fait.
En effet, pour envoyer votre version au serveur, vous allez devoir utiliser la commande ci-dessous qui initialisera une connexion SSH avec le serveur distant.
git push
Annuler toutes les modifications
Pour annuler toutes les modifications que vous avez faites sur votre ordinateur et revenir à l’état initial du dépôt, voici la commande à entrer.
git reset --hard
A ce stade, votre dossier n’est pas encore totalement identique au dépôt. En effet, après avoir réinitialisé les fichiers comme ils sont sur le dépôt distant, il faut penser à supprimer tous les fichiers qui ne sont pas pris en charge par git grâce à la commande suivante :
git clean -fd
De cette façon, vous vous retrouver avec un projet dans le même état qu’après avoir tapé la commande “clone”.
Ignorer les fichiers .DS_Store
Si vous êtes sous macOS, vous risquez de voir apparaître des fichiers .DS_Store dans vos envois… Pour éviter ce problème, placez-vous à la racine du dépôt et créez un fichier .gitignore.
nano .gitignore
Maintenant, ajoutez le contenu ci-dessous pour ajouter une liste de différents fichiers qui n’ont pas à être pris en charge par git dans tous les dossiers du projet.
# OS generated files # ###################### */.DS_Store .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes Icon? ehthumbs.db Thumbs.db
Si des .DS_Store ont déjà été envoyé dans git, vous allez devoir les supprimer pour les retirer du dépôt distant également.
Voici une commande pour parcourir les dossiers du projet et supprimez ces fichiers.
find . -name '*.DS_Store' -type f -delete
Conclusion
A travers cet article, nous avons développé l’installation et l’utilisation basique de git à l’aide d’un parallèle à Subversion. Toutefois, cet article ne traite pas de tous les cas d’utilisation possible et nous aurons l’occasion de voir l’utilisation avancé de git prochainement.