Git

Git est un logiciel de gestion de version. C’est un logiciel complexe imaginé pour permettre le développement de très gros logiciels (plusieurs millions de lignes de code) dans une communauté open source mondiale (des dizaines de milliers de contributeurs). Ce guide est une introduction permettant de faire ses tous premiers pas avec Git dans un environnement simple (en utilisant Github, avec un seul utilisateur sur le projet et avec un client graphique intégré à Visual Studio).

Introduction à Git

Git gère des dépôts (repository) qui permettent de stocker des fichiers et l’historique de leurs changements. Git a un fonctionnement décentralisé: un même dépôt peut exister sur plusieurs machines différentes. Dans notre cas, nous auront un premier dépôt stocké sur un service en ligne Github et nous réaliserons un clone de ce dépôt sur notre machine locale: le dépôt se trouvant sur Github sera appelé origin.

Un dépôt peut contenir plusieurs branches de travail, par exemple il peut y avoir une branche qui contient la version stable courante du logiciel et une branche qui contient la version en cours de développement. La branche principale est généralement appellée main (ou master). Dans notre cas, nous travaillerons toujours sur la branche principale. Chaque branche est composée d’une suite de commits qui représentent les modifications apportées aux fichiers de la branche (ajout/suppression/modification).

Lorsque l’on travail sur un dépôt Git, il y a principalement 3 versions des données qui existent en parralèle:

  1. les données stockées sur le dépôt d’origine (dans notre cas celui hébergé sur Github);

  2. les données stockées sur le dépôt local (sur votre ordinateur)

  3. l’état actuel des fichiers que l’on est en train de modifier (en partant d’une branche et d’un commit particulier, dans notre cas le dernier commit de la branche principale).

Bien entendu, si vous travailler sur plusieurs ordinateurs différents (par exemple les ordinateurs des salles de TPs et votre ordinateur personnel chez vous), vous serez amené à cloner plusieurs fois le dépôt d’origine et les items 2 et 3 existeront sur autant d’ordinateurs différents. Contrairement aux sytèmes de disques réseaux comme Dropbox, il n’y a pas de synchronisation automatique entre ces différents points de stockage: c’est à vous de choisir lorsque vous voulez transvaser des informations d’un niveau à l’autre.

Avertissement

Cela signifie que si vous oubliez de pousser vos modifications sur le dépôt d’origine sur Github à la fin d’une séance de travail, vous ne retrouvez pas votre travail sur Internet lors de votre prochaine séance de travail (par exemple pour continuer à travailler chez vous). Si vous perdez en plus votre dépôt local (en cas de changement de machine par exemple) : votre travail sera définitivement perdu.

Avertissement

Git est un outil professionnel, certaines commandes peuvent entrainer des suppressions de fichiers ou de modifications qui seront définitives. Faites toujours bien attention à lire les messages d’avertissement avant d’exécuter une commande et dans le doute faites d’abord un test sur un dépôt jouet.

Cloner un dépôt

Afin de récupérer un dépôt depuis Github, on réalise ce qu’on appelle un clone. Lors du lancement de Visual Studio, vous pouvez choisir l’option « Cloner un dépôt »:

../_images/clone_repot1.png

Il vous faut alors spécifier l’adresse https du dépôt à cloner dans le cadre 1 (quelque chose du genre https://github.com/monLogin/monProjet) et l’emplacement où stocker le dépôt sur votre ordinateur local dans le cadre 2.

../_images/clone_repot2.png

Commit

Pour sauvegarder l’état actuel des fichiers dans le dépôt local, on fait un commit. Dans l’exemple ci-dessous, on peut voir les élements suivants:

  1. On a ajouté un commentaire à la classe Game

  2. L’onglet « Modifications Git » permet d’avoir une IHM pour réaliser les opérations courantes de Git

  3. On y voit la liste des fichiers modifiés (ici le fichier Game.cs)

  4. On va indiquer que l’on veut ajouter tous les fichiers modifés dans le prochain commit avec le bouton « indexer » (on peut choisir chaque modification individuellement également)

../_images/commit1.png

On voit alors que:

  1. Les modifications sélectionnées passent maintenant dans la catégorie « Changements indéxés »

  2. On doit écrire un message décrivant le contenu du commit, ici « Comment for class Game »

  3. On créé finalement le commit en cliquant sur « Valider les changements indexés »

../_images/commit2.png

Push

Pour transmettre un ou plusieurs commit sur le dépôt d’origine, on réalise un push. Sur la copie d’écran ci-dessous, on voit qu’il y a 1 commit en attente d’être poussé sur le dépôt d’origine (cadre 1). On réalise cette opération en cliquant sur push (fléche vers le haut, cadre 2).

../_images/push1.png

On peut vérifier sur Github que notre commit a bien été poussé sur le dépôt d’origine:

../_images/push2.png

Pull

L’opération inverse d’un push est un pull qui consiste à récupérer des commits depuis le dépôt d’origine. Pour faire cela on clique sur le boutton « Tirer » (flêche pleine vers le bas):

../_images/pull1.png

En allant dans le menu « Git » puis « Voir l’historique de la branche », on peut vérifier que l’on retrouve bien tous nos commits :

../_images/pull2.png

Mots de la fin

Ces 4 opérations (clone, commit, push, pull) vous permettront d’utiliser git dans une configuration extrêmement basique (projet simple avec 1 seul utilisateur). Il vous reste donc de nombreuses choses à apprendre sur l’utilisation de Git comme par exemple le workflow classique de contribution dans un dépôt open-source (fork, clone, branch, commit, pull-request): voir par exemple ce tutorial sur Github.

Dans cette introduction, nous avons utilisé l’interface Git intégrée à Visual Studio. Aujourd’hui toutes les IDE modernes offrent ce type d’outils mais vous pouvez également utiliser Git en ligne de commande ou avec des surcouches graphiques indépendantes comme GitKraken (multiplateforme, version pro gratuite pour les étudiants) ou Tortoise Git (Windows, intégration dans l’explorateur de fichiers).