Sommaire

Versioning Avec Git

Présentation

Il arrive que l’on fasse pas mal de changement sur certains projets et au bout d’un moment tous par en cacahuète.
Habituellement, je faisais des archives avec la date au format %Y-%m-%d-%H:%M en préfixe. Le problème de cela et que je j’oubliais assez rapidement à quelle modification correspondent ces archives…

D’une autre part, j’ai pris pour habitude de faire des snapshots sur mes machines virtuelles en mettant en commentaire les informations nécessaires.

La solution étais sous mes yeux et que je n’osais pas prendre en main est git que j’ai appris a utilisé grâce au tutoriel du site du zéro.
Le but de cet article n’est pas de faire un tutoriel sur git mais plutôt de présenté un exemple d’application simple.

Voyez ci-dessous à quoi peut ressembler le résultat avec le dépôt sur lequel je versionne ma configuration d’Home Assistant :

/img/2020/2020-03-17-versioning-avec-git/1.png
Visualisation de l’historique avec Fork

On va donc voir ici comment mettre en place se système.

Configuration

Serveur

Le server est l’endroit qui centralisera les données. À noter que sur ce dernier, on ne pourra pas visualiser directement nos données car elles sont stockées d’une façon particulière.

1
sudo apt install git

Pour initier le dépôt, il y a deux méthodes :

  • La méthode propre
    Où on créer un utilisateur git et on stocke les données dans /var/lib/git
  • La méthode acceptable
    Où on stocke les données dans un dossier git du homedir

Pour la méthode propre, cliquer sur la section ci-dessous :

Info

On créer donc notre utilisateur :

1
2
sudo useradd --system --shell /bin/bash --comment 'git user' \
  --user-group --home-dir /var/lib/git git

Copier ensuite votre clé publique dans le fichier /var/lib/git/.ssh/authorized_keys.

Une fois positionné dans le dossier git on va créer un dossier pour notre premier dépôt. Il est d’usage de suffixé le nom par .git :

1
2
mkdir /var/lig/git/LesPokemons.git
git init --bare --shared /var/lig/git/LesPokemons.git

C’est tous pour la partie serveur !

Client

Côté client, nous avons deux cas à traiter :

  • Depuis un dossier existant
    Dans le cas où on veut versionner des fichiers existants
  • Depuis un dossier vide ou dépôt existant
    Ce cas s’applique aussi si on veut récupérer des fichiers d’un dépôt existant sur son client

Dossier existant

On se positionne donc dans le dossier où sont les fichiers que l’on veut pousser sur notre dépôt et on applique la commande git init. Vous remarquerez qu’un dossier .git a été créé dans ce répertoire.

On ajoute ensuite les fichiers que l’on veut “giter” avec git add 1-Bulbizarre.dat 4-Salameche.dat 7-Carapuce.dat ou git add * si on veut tout ajouter.

On va ensuite “commiter” ces fichiers avec la commande git commit.
Cette commande ouvre alors votre éditeur de fichier et vous permet alors d’écrire un message décrivant vos modifications.

Exemple
Initial commit

À ce stade, rien n’est encore envoyé sur le serveur. Chose évidente vu qu’on a toujours pas dit au client où envoyer ces fichiers.

Pour cela, on utilise la commande git remote add qui dans mon exemple donne git remote add origin git@192.168.92.17:/var/lig/git/LesPokemons.git

On peut alors poussé nos modifications sur le serveur avec un git push origin master.

TL;DR

1
2
3
4
5
git init
git add *
git commit -m 'Initial commit'
git remote add origin git@192.168.92.17:/var/lig/git/LesPokemons.git
git push origin master

Dossier vide ou dépôt existant

Le va alors cloner le dossier d’origine sur notre machine avec la commande git clone <lien du git> <répertoire>.
Si on ne précise pas de répertoire, cela va créer un dossier avec le nom du dépôt.

1
2
3
4
git clone git@192.168.92.17:/var/lig/git/LesPokemons.git pokemon
git add *
git commit -m 'Initial commit'
git push origin master

Mise à jour

Maintenant que tout est initié, vous pouvez travailler sur vos fichiers.
Prenons mon cas d’exemple :

  • J’ai édité le fichier 4-Salameche.dat
  • J’ai ajouté le fichier 25-Pickachu.dat

Je vais donc effectuer la suite de commandes suivantes :

1
2
3
4
5
6
git status
git add 4-Salameche.dat
git commit -m "Update info for Salameche (new technique)"
git add 25-Pickachu.dat
git commit -m "Add new friend Pickachu !"
git push

Vous aurez compris par cet exemple que l’on peut faire plusieurs commit avant de pousser nos modifications sur le serveur.

Informations utiles

Voici quelques commandes supplémentaires :

  • git log : historique
  • git commit --amend : modifier le message du dernier commit
  • git reset HEAD^ : revenir à l’avant-dernier commit (soit annuler le dernier)
  • git reset --hard HEAD^ : restore aussi les fichiers modifiés
  • git checkout 4-Salameche.dat : Reprend le fichier à la version du serveur
  • git revert

Si vous avez fait n’importe quoi et que vous souhaitez revenir sur la version actuellement sur le serveur :

1
2
3
git fetch origin
git reset --hard origin/master
git clean -f -d

La ligne de commande c’est bien pour comprendre mais ça devient vite lourd si on fait tout le temps la même chose.
J’utilise l’utilitaire Fork pour cela
(il ressemble beaucoup à GitKraken) en plus d’utiliser de plus en plus VSCode.

Conclusion

Ce tutoriel permet de faire ces premiers pas avec git.
Une fois que vous vous sentez à l’aise, essayer de vous documenter sur les branches par exemple.
Je vous invite aussi à vous renseigner sur le fichier .gitignore.

Bon versioning 😉 !