Git

De EduTech Wiki
Aller à la navigation Aller à la recherche

Pour l'instant se référer à Git et Github

Introduction

Git est un système de contrôle de versions gratuit et open-source. Système de contrôle de versions est un terme complexe pour une chose simple : Git permet d'effectuer le suivi d'un projet, en enregistrant les modifications apportées aux fichiers qui font partie du projet (historique des versions). Il donne ainsi la possibilité de faire un suivi et accéder facilement à une version antérieure d'un fichier, sans avoir besoin de les nommer et archiver manuellement.

Git est devenu le système de contrôle de version le plus populaire de nos jours. Alors qu'il a initialement été utilisé principalement pour le développement informatique, il existe une tendance de plus en plus forte à l'adopter dans d'autres domaines, par exemple dans des projets de recherche à la fois comme support pour l'évolution d'un projet dans le temps et comme moyen de collaboration (ce qui implique l'intégration avec des plateformes online comme GitHub ou GitLab). Il est également très utile pour gérer plusieurs versions d'images ou de vidéos lors de projets de conception graphique.

Comment Git peut vous faciliter la vie

Si vous avez déjà eu l'occasion de travailler sur un projet, peu importe le domaine, vous vous êtes sûrement retrouvé à devoir nommer les différentes versions de vos documents, par exemple "docProjet_v1.docx". Celui-ci s'est rapidement transformé en "docProjet_v12.docx", pour autant que vous n'ayez pas oublié de faire une sauvegarde au lieu de travailler sur le document initial, perdu pour toujours... Il suffit que vous deviez collaborer avec deux partenaires sur un projet, et vous vous retrouvez avec un dossier comprenant des dizaines de documents, avec des numéros de versions différentes ET les acronymes des membres du groupe "docProjet_v13_mimi_modifié_v2"... tout ceci envoyé par email et stocké quelque part dans votre logiciel de messagerie!

Ce système de gestion manuelle est loin d'être optimal et c'est là qu'intervient Git. Avec quelques lignes de codes, vous avez le contrôle sur ce qui est créé, sauvegardé et récupéré, selon vos besoins. Les avantages principaux de Git sont :

  • le suivi des changements dans un dossier projet (repository)
  • la possibilité rapide de revenir à une version précédente pour un fichier ou tout le projet
  • la facilitation de collaboration (centralisation et suivi des versions par utilisateur)
  • la possibilité de créer des embranchements pour travailler sur des tâches différentes selon la progression d'un projet
  • la réduction d'erreurs humaines dans l'archivage de fichiers
  • et last but not least, en cas de perte ou de destruction de fichiers, ils sont récupérables simplement

Installer Git

Pour travailler avec Git, vous allez utiliser quelques lignes de commandes simples depuis un terminal. Si vous n'êtes pas familier avec cet outil, vous pouvez vous référer à la page sur les lignes de commande.

En premier lieu, téléchargez Git depuis la page git-scm.com en choisissant la version correspondant à votre machine. Comme il est possible que Git ait été installé avec d'autres logiciels, typiquement en installant Github Desktop, vous pouvez ouvrir un terminal et taper la ligne de commande suivante pour déterminer si Git est déjà installé et sous quelle version :

git --version

Même si Git est déjà installé, il est probablement utile de mettre à jour avec la version la plus récente.

Il existe plusieurs façons d'installer Git en fonction de votre système d'exploitation, nous présentons les plus simples.

Windows

Sous Windows, l'installation est relativement simple. Rendez-vous sur Git for Windows (Git BASH) et téléchargez la dernière version disponible puis lancez-la et suivez les instructions. Pour l'installation, vous pouvez laisser toutes les configurations par défaut. Si vous voulez néanmoins que Git soit disponible également dans la ligne de commande de Windows (prompt ou powershell), cochez cette option :

Optionnel : cochez cette option si vous voulez avoir les commandes Git dans le prompt ou powershell de Windows.

MacOS

Il existe un installeur pour Mac : git-osx-installer :

  • Téléchargez une archive .dmg qui vous donnera accès à plusieurs fichiers.
  • Ouvrez l'archive .pkg qui se trouve à l'intérieur; cela aura pour effet d'exécuter le programme d'installation.
  • Suivez les étapes en laissant les valeurs par défaut.

Vous pouvez également simplement utiliser XCode :

  • Ouvrez un terminal et tapez git --version
  • Si Git est installé, cela renvoie sa version. Sinon, le terminal vous propose de l'installer.

Toutes les méthodes d'installations sont disponibles sur la page git-scm.com

Configurer Git

Maintenant que Git est installé, il est intéressant de personnaliser au moins deux éléments : votre nom d'utilisateur et votre adresse email. Ces informations sont définies une fois au début et permettent de faire un suivi. Si vous utilisez déjà Github, assurez-vous que vous utilisez bien les mêmes nom et email.

  1. Ouvrez une invite de commande (windows) ou un terminal (mac)
  2. Si vous ne l'avez pas fait à l'étape précédente, vérifiez que Git est installé en tapant git --version
  3. Pour configurer votre nom d'utilisateur, tapez git config --global user.name votre nom d'utilisateur
  4. Pour configurer votre adresse email, tapez git config --global user.email votre email

Pour les curieux, vous pouvez visualiser votre configuration globale en tapant : git config --list

Débuter avec Git

Pour commencer à travailler avec Git, il y a deux solutions :

  • soit créer un dépôt vide si vous commencez un nouveau projet
  • soit cloner un dépôt existant et l'importer dans Git. Dans ce cas, vous récupérez tout l'historique (versions) des changements d'un projet pour travailler dessus.

Un dépôt, dans un logiciel de gestion de versions comme Git, est une copie du projet. On dit que chaque personne qui travaille sur le projet a une copie du dépôt.

Créer un nouveau dépôt

Pour créer un nouveau dépôt en local, il faut tout d'abord créer un dossier du nom du projet sur votre disque local. Vous pouvez simplement créer un dossier par le gestionnaire de dossier habituel, soit directement avec des lignes de commandes :

cd /home/user1
mkdir projet1
cd projet1

Ce qui veut dire

1re ligne

  • cd = ouvrir un répertoire
  • /home = répertoire "home" à la racine du disque (premier "/" = racine du disque) contenant le(s) profil(s) utilisateur(s).
  • /user1 = répertoire personnel de l'utilisateur 1

2e ligne:

  • mkdir projet1= commande permettant de créer (make directory [mkdir]) le répertoire "projet1" dans le profil utilisateur précédemment ouvert

3e ligne:

  • cd projet1= ouvre le répertoire "projet1" dans le profil user1 du répertoire "home".

Une fois le dossier créé, la dernière chose à faire est d'initialiser un nouveau dépôt avec la commande git init. Cela signifie que vous venez de créer un nouveau projet Git dans le dossier où vous vous trouvez (un dossier cache .git vient tout simplement d'être créé).

Cloner un dépôt existant

Cela signifie qu'on récupère tout l'historique et tous les codes source d'un projet avec Git.

Comment trouver un dépôt Git ? vous pouvez vous rendre sur github.com qui contient une multitude de dépôts Git et prenons, par exemple, Jquery, vous y trouvez notamment tous les fichiers du projet.

Vous trouvez aussi l'adresse du dépôt (https), ce qui va vous permettre de cloner.

Dans la ligne de commande, vérifiez que vous êtes bien à l'endroit où vous voulez cloner le projet (rappel, pour revenir à la racine du disque faire cd / = racine) et taper en ligne de commande: git clone https://github.com/jquery/jquery.git.

Cela va créer un dossier "jquery" et y télécharger tous les fichiers source du projet ainsi que l'historique des modifications. Git compresse automatiquement les données pour le transfert et le stockage, il peut arriver que le clonage d'un dépôt prenne beaucoup de temps.

NB: des messages apparaîtront dans la console. Le dernier de ces messages débutant par checking out; cela signifie que le clonage est terminé.

NB2: pour cloner un dépôt, il y a plusieurs méthodes.

  • Une première méthode ci-dessus
  • Une deuxième méthode consiste tout simplement à télécharger le projet via "DOWNLOAD ZIP"
  • Une troisième méthode nécessite l'utilisation de Git Desktop. Pour cela, "forkez" le projet puis aller dans Git Desktop pour le cloner (cela nécessite donc de connaître Git Desktop).

Fonctionnement général de Git

Git a pour particularité de segmenter clairement les différents niveaux auxquels vous travaillez. En effet, on distingue trois niveaux d'organisation:

  1. Environnement de travail (Working Directory) C'est l'endroit où vous ajoutez/modifiez/supprimez votre code et vos fichiers.
  2. Zone de transit (Staging Area) C'est l'endroit où sont listées les modifications apportées dans votre environnement de travail.
  3. Dépôt final (Repository) C'est l'endroit où Git stocke définitivement les changements apportés, ainsi que les différentes versions de votre projet. Il combine donc d'une part les codes et fichiers effectivement créés et liste les modifications apportées au répertoire, de sorte qu'on puisse aisément revenir sur les modifications apportées.
Etapes de fonctionnement avec Git

Marche à suivre classique

Une fois le dossier projet créé et lié à un dépôt Git, vous pourrez, à chaque fois que vous en aurez envie, faire une sauvegarde d'une version du projet. Pour ce faire, voici une marche à suivre standard.

  • Ouvrez le terminal et aller dans le dossier du projet
  • Tapez git status  : cette commande vous donnera l'état du projet, c'est-à-dire les différences entre votre environnement de travail (le dossier projet) et le dépôt Git.

Si aucune modification n'a été apportée, le terminal affiche : nothing to commit, working tree clean

  • Si des modifications ont été apportées, vous verrez apparaitre deux zones : les fichiers déjà existants dans le dépôt Git qui ont été modifiés depuis le dernier commit et les nouveaux fichiers (qui n'existaient pas dans la version précédente).
  • A ce stade, vous allez identifier quels fichiers vous désirez sauvegarder dans le dépôt Git, avec la commande git add. Cette commande stocke temporairement les fichiers sélectionnés dans la zone de transit (staging area). Si vous souhaitez sauvegarder toutes les modifications apportées sur les différents fichiers du projet, il suffit de taper git add . qui "stage" la totalité des fichiers.
  • Une fois les fichiers sélectionnés dans la zone de transit, il vous suffit de taper git commit pour créer un snapshot de votre projet (version sauvegardée) dans le dépôt Git. Afin de pouvoir facilement retrouver les versions précédentes, il est fortement conseillé d'ajouter un titre au commit en utilisant la commande git commit -m"titre de la version".
  • Pour vérifier que tout s'est bien déroulé, vous pouvez faire un git status et contrôler l'état des fichiers.

Exemple concret pour un projet de page web

Vous voulez créer une page web accompagnée d'une feuille de style.

Sauvegarde des versions

  • Commencez par initialiser un dossier projet git init, qui sera vide et par défaut sur la branche master .
  • A l'aide de l'éditeur de votre choix, créez votre fichier index.html et sauvegardez-le dans le dossier projet, précédemment créé
  • Le fichier est nouveau, nous devrions donc voir une modification dans le dossier. En tapant git status, on voit que :

Gitstatus1.png

  • il n'y a pas encore eu de commit
  • il existe un fichier untracked, soit notre nouveau fichier index.html
  • Pour sauvegarder cette version du fichier, il faut ajouter des fichiers à la zone de transit avec git add .. Le point après add permet de sélectionner tous les fichiers untracked.
Gitadd.png

En vérifiant le statut, on voit que le fichier index.html est considéré comme nouveau et est prêt à être sauvegardé (commit).

  • Faites un git commit pour sauvegarder cette version du fichier dans l'historique des versions.

Gitcommit.png

  • Le transfert est confirmé et en tapant git status dans le terminal, le message "working tree clean, nothing to commit" confirme que les sauvegardes sont à jour.
  • Bonne pratique : en ajoutant la fonction -m"votre texte" après le commit, il est plus facile de retrouver la version que l'on recherche lorsque l'on veut récupérer un fichier.
  • Créez une feuille de style dans le dossier projet, puis modifiez votre fichier index.html
  • En tapant git status, on voit que les deux fichiers ont des statuts différents, car index.html existe déjà et a été modifié (modified) et le fichier css est nouveau (untracked).

Gitstatus2.png

  • A ce stade, il est possible de choisir si l'on veut faire un commit de la totalité des fichiers (avec git add .) ou certains fichiers seulement.
  • pour voir l'historique des versions, tapez git log. La commande log affiche une grande quantité d'information pas nécessairement utile. L'option --oneline permet de se concentrer juste sur le titre (inscrit après -m en effectuant le commit).

Gitlog.png

  • Les versions apparaissent de la plus récente à la plus ancienne
  • Chaque version a un code unique, mais on voit l'intérêt d'un message explicite à chaque commit
  • Le texte HEAD -> master" indique que la version actuelle est la dernière version

Récupération de versions précédentes

Chaque fois que vous apportez des modifications suffisamment significatives, vous allez faire un git commit qui vous permettra au besoin de récupérer un état spécifique de votre projet.

Vous avez modifié votre fichier .css mais vous n'aimez pas le résultat et désirez revenir à la version précédente.

  • Tapez git checkout version du commit style.css

La version du commit est disponible en faisant un git log Le fichier .css dans votre dossier projet est revenu à la version précédente.

Si vous ne souhaitez pas réutiliser à cette version, vous pouvez revenir à la dernière version en faisant git reset HEAD index.html, puis git checkout --index.html. Cette opération remet la tête de lecture (head) sur la dernière position et checkout la dernière version sauvegardée du fichier index.html.

Récapitulatif des commandes standards

git status donne un aperçu de l'état du dépôt par rapport aux modifications apportées
git add ajoute les fichiers sélectionnés à la zone de transit
git commit transfère les fichiers modifiés de la zone de transit au dépôt final
git log liste les versions des fichiers. Ajouter --oneline pour un résumé des titres, sans les détails des sauvegardes
git checkout Restaure une version précédente du projet

Ressources

  • Site officiel
  • Pro Git Book Livre complet sur Git en ligne et gratuit (en anglais)
  • Dangit, Git?! : Site qui illustre des problématiques communes qu'on peut rencontrer avec Git, ainsi que les solutions pour résoudre ces problématiques