Contrôle de version et Git
Le contrôle de version
Qu'est-ce que le contrôle de version ?
Les buts premiers d'un logiciel de contrôle de version sont:
- Suivre les modifications apportées à un ou des fichiers
- Modifications des données
- Horodatage des modifications
- Informations sur les auteurs
- Raisons des modifications
- Revenir en arrière si besoin
- Travailler temporairement sur des versions alternatives (branches)
Ces outils sont omniprésents dans l'informatique moderne:
- Suites bureautiques: MS Word, Libre Office, ...
- Gestion de code: Git, SVN, Mercurial, CVS, SourceSafe, etc ...
- Archivages automatiques de disques
Quels cas d'usages ?
Voici quelques cas pour lesquels la gestion de version est primordiale:
- Vous travaillez en groupe et un collègue a introduit un bug dans la dernière version. Vous devez faire une démonstration dans une heure : en un clic, vous revenez à la dernière version fonctionnelle
- Vous vous demandez qui a modifié telle section d'un document (rapport, contrat) qui vous semble fausse
- On vient vous voir pour un comportement qui a changé entre la v2 et la v3. Vous en êtes à la v7 et toute l'équipe a changé depuis. Vous reconstruisez la v2. Vous reconstruisez la v3. En comparant les journaux de fonctionnement, vous isolez le fichier fautif, et avec les commentaires de chaque version, vous retrouvez la raison des changements et le défaut de logique.
- Vous avez travaillé pendant trois mois sur votre machine sans sauvegarde et votre disque crash la veille du rendu (très classique chez les étudiants)
- Vous avez travaillé sur un projet seul pendant un an, vous trouvez un bug et vous n’avez aucune idée d’où ça vient. Vous testez les versions par dichotomie et vous trouvez rapidement le commit qui introduit le bug.
- Même chose sur un projet d’équipe, et là, vous avez le nom de l’auteur du commit et vous pouvez aller lui demander.
Git
Présentation
Git est un logiciel de gestion de version pour des fichiers. C'est un outil incontournable pour l'ingénieur, même non informaticien: que ce soit pour des logiciels ou des documents issus d'une collaboration, Git s'est imposé comme la norme et est la version la plus utilisée de logiciel de contrôle de version.
Attention
Il est important de réaliser que si vous êtes bloqués en Git pour quelque raison que ce soit, vous devez consacrer du temps à vous débloquer, en demandant de l'aide, en continuant à vous former, car l'impasse sur Git n'est pas possible.
Cette UE a pour but de vous fournir des bases pour un démarrage rapide avec Git. Pour une aide plus (très) complète sur Git, consultez la documentation officielle.
Les principes de Git
Les éléments principaux de Git sont:
- Le dépôt, qui est l'ensemble des répertoires et fichiers que vous voulez voir gérés par Git
- Un répertoire
.git
dans le répertoire racine du dépôt- contient tout l'historique des modifications sur tous les fichiers
- on parle de dépôt local
- Un dépôt hébergé par un serveur du type GitLab ou GitHub
- on parle de dépôt distant ou remote
- Des versions alternatives du dépôt
- on parle de branches
- Un gestionnaire de différences de fichiers capable de fusionner (dans la majeure partie de cas) deux versions différentes en une seule
- on parle de merge
Attention
Il ne faut jamais modifier ce répertoire .git
ou son contenu.
Git est un logiciel très complet avec une énorme quantité d'options. For heureusement, il est très verbeux et vous donne de nombreux messages quasiment à chaque commande.
Exemple lors d'une commande Git:
git checkout 5c7855194611cb1c96f8531b736aa59a7d646df1
Note : basculement sur '5c7855194611cb1c96f8531b736aa59a7d646df1'.
Vous êtes dans l'état « HEAD détachée ». Vous pouvez visiter, faire des modifications
expérimentales et les valider. Il vous suffit de faire un autre basculement pour
abandonner les commits que vous faites dans cet état sans impacter les autres branches.
Si vous voulez créer une nouvelle branche pour conserver les commits que vous créez,
il vous suffit d'utiliser l'option -c de la commande switch comme ceci :
git switch -c <nom-de-la-nouvelle-branche>
Ou annuler cette opération avec :
git switch -
Désactivez ce conseil en renseignant la variable de configuration advice.detachedHead à false
HEAD est maintenant sur 5c78551 test
Prenez le temps de les lire !
Installation et Configuration
Git est normalement installé par défaut sur la plupart des systèmes (voir introduction).
Vérifiez la version:
Toute modification faite sur un fichier via Git va enregistrer, en plus des modifications, l'auteur et son email.
Vous devrez donc commencer par configurer Git pour enregistrer vos identifiants par défaut pour tous vos projets.
Pour enregistrer vos identifiants pour TOUS vos projets:
Pour enregistrer vos identifiants pour le projet courant:
L'option --global
pour git config
indique que la configuration est pour l'utilisateur (fichier ~/.gitconfig
).
Sans cette option, git config
lit et écrit les données de configuration du dépôt courant (fichier mon_projet/.git/config
).
Vous pouvez vérifier les informations de configuration en ne mettant pas de valeur:
Toute modification faite sur un fichier via Git va aussi enregistrer un message décrivant les modifications. Dans certains cas, ce message sera à éditer par l'utilisateur, et vous pouvez donc configurer l'éditeur texte de votre choix. Pour les débutants, nous recommandons nano
:
Git au quotidien
Vous n'aurez sûrement pas besoin de toute l'artillerie de Git à chaque séance de travail. Dans la majeure partie des cas, vous ferez toujours la séquence suivante:
- Récupérer les modifications sur le dépôt distant via
git pull
- Faire des modifications sur un projet, et créer un commit en local
- Ajouter les fichiers à enregistrer via
git add
- Acter la modification via
git commit
- Envoyer vos commits locaux vers le dépôt distant via
git push
Nous verrons dans les sections suivantes ces cas d'usages plus en détail.
Dépôts
Qu'est-ce qu'un dépôt Git ?
Un dépôt Git, ce sont les données du système de contrôle de version, c'est-à-dire au moins toutes les versions de tous les fichiers (ou un moyen de les reconstituer). C'est aussi toutes les informations d'auteur, de temps, de dépendance, de branches...
En anglais, on parle de repository.
Le dépôt se trouvant sur votre machine s'appelle le dépôt local et vous permet de travailler et enregistrer l'historique dans Git sans avoir besoin de connexion réseau.
Les dépôts se trouvant ailleurs s'appellent dépôts distants et vous permettent de:
- partager votre travaille pour des projets collaboratifs
- sauvegarder votre travaille sur des machines sûres
- simplifier l'ajout de vos contributions à des projets existants (voir Git avancé).
Info
Git ne suit pas un modèle maître esclave où un unique serveur détient un unique dépôt partagé. Il est conçu pour travailler avec autant de dépôts distants que désiré, ce qui complique un peu la compréhension mais ouvre de nombreuses possibilités aux développeurs: dépôts privés, dépôts publiques, etc...)
Répertoires et dépôt
Git ne raisonne pas en termes de répertoire. Si vous créez un répertoire vide et tentez de l'ajouter au dépôt, Git ignorera cette demande. Pour ajouter un répertoire à votre dépôt, il suffit d'ajouter au moins un fichier contenu dans ce répertoire.
Vous n'avez pas de limitation sur le nombre de fichiers ou de répertoires/sous-répertoires que vous pouvez avoir dans un dépôt, alors utilisez ceci pour mieux organiser vos projets.
Dépôts distants
Travailler à plusieurs sur un dépôt implique de passer par un dépôt distant, hébergé le plus souvent sur GitHub ou un serveur Gitlab.
Ce dépôt est identifié par une adresse commençant par:
https://
: dans ce cas, l'authentification est limitée à un classique login/password.
Attention
La plupart des serveurs n'autorisent pas l'accès en écriture dans ce mode.
git@
: authentification via clés SSH, à utiliser de préférence
Pour faire une copie de ce dépôt en local, utilisez git clone URL
.
Info
Pour vos projets hébergés sur gitlab.telecom-paris.fr et créés par vos enseignants, il faut d'abord vous connecter au serveur en utilisant le SSO. Pensez à ajouter votre clé publique SSH dans vos préférences de compte.
Exemple pour le serveur Gitlab de Telecom Paris:
-
accès en lecture seule
-
accès en lecture/écriture via SSH
Initier un dépôt local
Pour créer un nouveau dépôt Git sur votre ordinateur, créez un répertoire du nom de votre choix (éviter les espaces), accédez-y puis tapez git init
:
Pour pousser ce dépôt local sur un serveur distant, il vous faut un serveur avec des droits d'écriture et création de dépôt, ce qui n'est pas toujours le cas. Vous allez ensuite ajouter ce serveur en lui donnant un nom, local à votre dépôt, et l'adresse correspondante:
Ensuite vous n'avez plus qu'à dire à Git de mettre votre version courante (branche locale) sur ce serveur sous le nom de main
(ou master
ou ...):
Récupérer les modifications d'un dépôt distant
Dans un projet collaboratif, les modifications sur les fichiers peuvent apparaître à n'importe quel moment sur le dépôt distant. Afin de les voir localement, par exemple avant de commencer une session de travail, il faudra:
- récupérer la liste des modifications
- appliquer les modifications à vos fichiers locaux
La plupart du temps, ces deux opérations sont cumulées en une seule commande git pull
.
Publier les modifications sur un dépôt distant
Une fois votre travail terminé, vous voudrez envoyer vos modifications sur le dépôt principal de votre projet. On utilise pour cela la commande git push
et on parlera de pousser ses modifications.
Avant de démarrer
Dans les sections suivantes, pour tester Git, nous supposons que vous travaillez dans un dépôt créé par vous localement via git init
. Vous pouvez faire en parallèle les exercices pour mieux comprendre les notions abordées.