Gestion de versions

Pour un développeur, les fichiers qu'il produit sont précieux. Il est donc important de les protéger et de documenter leur évolution. Pour cela nous employons des logiciels de gestion de versions (qui sont aussi incontournables pour le travail collaboratif). Nous allons vous montrer comment utiliser la commande git et notre serveur de dépôt Gitea pour assurer le suivi de votre travail.

Configuration initiale

Rendez-vous sur la page d'accueil de Gitea et identifiez-vous. Ce service acceptera les mêmes identifiants que les machines des salles de TP.

Une fois identifié, accédez aux paramètres de votre compte et mettez à jour le nom complet et l'adresse e-mail principale. Nous allons nous assurer que git sur votre machine et Gitea sur le serveur ont bien les mêmes informations. Dans un terminal lancez les commandes suivantes (en utilisant les mêmes informations que sur Gitea) :

git config --global user.name "Votre nom"
git config --global user.email "login@domaine.example"
git config --global pull.rebase false

Pour sécuriser les échanges entre votre machine et le serveur, il va vous falloir une paire de clés de cryptage. Tapez la commande suivante et validez sans entrer de réponse si des questions vous sont posées :

ssh-keygen -t rsa -C "login@domaine.example"

Ceci a créé parmi vos fichiers une clé privée et une clé publique. Nous devons maintenant donner la clé publique à Gitea. Commençons par afficher la clé publique :

cat .ssh/id_rsa.pub

Vous pouvez copier cette clé en la sélectionnant à la souris (aucun raccourci clavier n'est nécessaire). Revenez ensuite dans le navigateur et parmi les paramètres de votre compte Gitea, choisissez «Clés SSH». Cliquez sur «Ajouter une Clé» puis copiez la clé dans la boîte «Contenu» (en appuyant sur la molette de la souris). Choisissez le nom que vous voulez pour la clé (vous pouvez l'appeler «TP» pour vous souvenir qu'elle sert à communiquer avec les machines des salles de TP).

Création d'un dépôt en ligne

Chaque projet auquel vous participez devrait avoir un dépôt dédié (et même plusieurs, comme nous le verrons par la suite). Nous allons considérer votre travail dans le champ disciplinaire DEV comme un projet et lui consacrer un dépôt sur Gitea pour qu'il y soit sauvegardé et que vous puissiez y accéder depuis l'extérieur de l'IUT.

Créez un nouveau dépôt en utilisant le bouton qui ressemble à un «+». Nommez-le «DEV» et rendez-le privé. Dans la catégorie «.gitignore» ajoutez les modèles «C» et «Vim», puis cochez si nécessaire la case «Initialiser…».

Vous pouvez ensuite valider et constater que vous avez un dépôt contenant deux fichiers (pas vraiment importants pour l'instant). Le dépôt en ligne est prêt et nous n'aurons plus besoin d'accéder à Gitea par son interface web à partir de maintenant.

Création d'un dépôt local

git a besoin d'un dépôt local pour fonctionner. Nous allons donc créer un dépôt local, et le dépôt en ligne sera régulièrement synchronisé avec celui-ci de façon à sauvegarder vos fichiers sur une autre machine et à les rendre accessibles depuis l'extérieur.

Une seule commande permet de créer le dépôt local et d'en faire une copie du dépôt en ligne. Placez-vous dans votre répertoire domicile et exécutez la commande suivante :

git clone gitea@grond.iut-fbleau.fr:login/DEV.git

Pensez à placer votre propre login dans cette commande. Si tout s'est bien passé, vous devriez voir un nouveau répertoire nommé DEV (le nom du dépôt d'origine). Ce répertoire devrait contenir trois éléments :

  • un répertoire .git
  • un fichier .gitignore
  • un fichier README.md

Le dépôt local à proprement parler est dans le répertoire .git. Nous n'avons pas besoin de le visiter, mais vous pouvez y jeter un coup d'œil si vous êtes curieux. Le répertoire DEV est le répertoire de la copie de travail des fichiers du dépôt.

Mise à jour du dépôt

Un projet progresse généralement à travers une multitude de versions qui se succèdent. Un dépôt se souvient de toutes les versions, pas seulement de la plus récente. Pour ajouter une version au dépôt, il faut la lui soumettre (commit en anglais). C'est pourquoi on parle de soumission plutôt que de version.

Pour créer chaque nouvelle version, on procèdera en quatre étapes :

  • on modifie la copie de travail jusqu'à atteindre l'objectif de la version
  • on prépare la soumission en identifiant les fichiers modifiés, ajoutés ou supprimés dans la copie de travail
  • on soumet la nouvelle version au dépôt local
  • on propage la version du dépôt local vers le dépôt en ligne

Testons-le dans un cas concret. Vous avez déjà créé un certain nombre de fichiers en DEV. Ajoutons-les au dépôt pour qu'ils soient sécurisés et disponibles. À la fin de chacune des étapes qui suivent, pensez à regarder où vous en êtes en invoquant la commande  :

git status

La première étape consiste à déplacer le répertoire DEV1.1 à l'intérieur du répertoire DEV. Souvenez-vous de la commande mv...

La deuxième étape utilise la commande git pour «ajouter» les nouveaux fichiers à la future soumission. Il y en a beaucoup, mais heureusement en ajoutant un répertoire, on ajoute aussi automatiquement son contenu. Placez-vous dans le répertoire DEV (c'est important) et lancez la commande :

git add DEV1.1

Lorsque la future soumission a enregistré tous les changements de la copie de travail, on passe à la troisième étape, la soumission proprement dite. La commande à donner est la suivante :

git commit -m "Ajout des fichiers des séances précédentes"

Le message que vous attachez à la soumission sera visible quand on inspecte l'historique. Soyez donc bref mais précis.

Enfin, la quatrième étape va nous permettre de synchroniser le dépôt local avec le dépôt en ligne. On dit que le dépôt local «pousse» la nouvelle soumission vers le dépôt en ligne.

git push

Procédure à chaque début de séance

À partir de maintenant, nous devons prendre quelques précautions supplémentaires. Avant tout, ne commencez pas à travailler sur votre copie de travail si elle n'est pas à jour. Au cas où vous avez créé un autre dépôt local sur un ordinateur personnel (ce qui est chaudement recommandé), il est possible que vous ayez travaillé chez vous, et donc mis à jour le dépôt en ligne. Dans ce cas, le dépôt local de l'IUT (et donc aussi votre copie de travail) sont obsolètes. Pour remettre tout ça d'aplomb, il faut «tirer» la dernière version du dépôt en ligne vers le dépôt local :

git pull

Si vous modifiez une version obsolète puis tentez de soumettre le résultat au dépôt en ligne, il y de fortes chances que votre nouvelle version ne soit pas une stricte évolution de la version la plus récente sur le dépôt en ligne. Un ou plusieurs conflits de version peuvent alors se produire, et il est encore un peu tôt pour se lancer dans la résolution de ce genre de problèmes...

Procédure durant chaque séance

Dès que vous êtes satisfaits des modifications apportées à un fichier, ajoutez-le immédiatement à votre future soumission. Techniquement, vous pouvez attendre la fin de la séance pour le faire, mais vous risquez d'oublier des fichiers. Comme vu précédemment, la commande est :

git add le_chemin_du_fichier

Si vous supprimez un fichier dans votre copie de travail, n'utilisez pas rm, car la disparition de ce fichier doit être signalée à git. Employez plutôt :

git rm le_chemin_du_fichier

Notez que grâce à la configuration initiale du dépôt en ligne (et au fichier .gitignore), certains fichiers, même s'ils sont présents dans la copie de travail, ne sont pas intégrés aux dépôts. Par exemple, c'est le cas de tous les fichiers qui se terminent par ~, car ce sont des copies obsolètes produites par vim ou emacs par mesure de précaution.

Il est également souhaitable que les exécutables produits par gcc ne soient pas stockés dans les dépôts, parce qu'ils sont faciles à reproduire au besoin et parce qu'ils risquent de ne pas être exécutables dans un autre environnement. Pour qu'ils soient ignorés par git, donnez-leur des noms se terminant par .out.

Procédure à la fin de chaque séance

Lorsque votre travail est terminé, il est temps de le propager vers les dépôts. Commencez par vérifier que la soumission est bien préparée :

git status

Puis soumettez votre travail :

git commit -m "J'ai bien bossé !"

Et enfin, synchronisez le dépôt en ligne :

git push

retour à la page d'accueil

retour au sommet