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.
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).
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.
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 :
.git
.gitignore
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.
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 :
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
À 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...
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
.
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