Git

Introduction à Git
Author

Ludovic Deneuville

Le but est de vous présenter très rapidement Git et son utilisation. Pour plus d’informations, consultez les liens en bas de cette page.

1 Git ?

Git est un logiciel qui permet de :

  • versionner son code
  • synchroniser des dépôts de code

Lorsque vous travailler à cinq sur un projet, ce n’est pas évident pour tous d’avoir à chaque instant la même version du code.

En travaillant avec Git, vous allez avoir :

  • un dépôt de code commun central distant (remote) hébergé ici sur https://github.com/
  • chacun votre dépôt local sur lequel vous travaillez

L’idée est synchroniser réguliérement ces dépôts pour que chaque membre de l’équipe travaille avec la version la plus récente.

NoteUn dépôt ?

C’est simplement un ensemble de dossiers et fichiers, comme un Drive.

Pour faciliter la synchronisation, un dépôt doit être :

  • léger (quelques Mo maximum)
  • contenir principalement des fichiers lisibles par un éditeur de texte (.txt, .sql, .py, .R, etc.)

Nous allons ensuite détailler le fonctionnement de Git dans le cadre d’un exercice.

2 Exercice

2.1 Compte GitHub et jeton

Vous allez commencer par créer créer votre compte GitHub et ensuite générer un jeton qui vous permettra de communiquer entre vos dépôts sans authentification supplémentaire.

    • Note: for ENSAI datalabs
    • Expiration: 30/06/<year n+1>
    • cochez repo and workflow
    • Generate token
Caution

Attention sa valeur ne sera affichée qu’une seule fois. En cas de perte, il faut le supprimer et en recréer un nouveau.

Vous allez maintenant déclarer ce jeton sur le datalab :

Vous allez maintenant pouvoir utiliser ce jeton dans vos services pour communiquer avec GitHub.

Sans ce jeton, vous seriez obligé de vous authentifier (login + pwassord) à chaque échange entre vos dépôts.

2.2 Créer un dépôt distant

Le plus facile est de commencer par créer le dépôt distant sur GitHub et ensuite de le cloner.

    • Repository name : ENSAI-Git-TP
    • Add README : On
    • Add .gitignore : Python
    • Create repository

Votre dépôt distant est créé. Il contient uniquement les fichiers README et .gitignore.

Tip

Le dépôt distant n’a pas vocation à être modifié directement.

Son rôle est de :

  • avoir une sauvegarde de votre code
  • avoir un dépôt central si vous travaillez à plusieurs

Les modifications seront réalisées sur les dépôts locaux et partagées sur le dépôt distant.

2.3 Cloner son dépôt local

Commençons par récupérer l’url du dépôt distant :

Nous allons maintenant créer un clone local dans un service du datalab.

Sur le datalab :

Vous arrivez sur la page des paramètres avant de lancer le service.

Vous avez maintenant un service VScode avec un clone local de votre dépôt.

TipCe qu’il s’est passé

Suite au lancement de votre service, la commande suivante a été exécutée :

`git clone https://$GIT_PERSONAL_ACCESS_TOKEN@github.com//ENSAI-Git-TP.git

avec :

  • $GIT_PERSONAL_ACCESS_TOKEN : une variable d’environnement contenant la valeur de votre jeton
  • <username> : votre nom d’utilisateur GitHub

Cette commande crée localement un clone de votre dépôt distant.

2.4 Add, commit, push

Avant de commencer à modifier votre dépôt local, vérifiez qu’il est bien branché sur le dépôt distant.

Dans Visual Studio Code :

Vous devez voir apparaitre l’url de votre dépôt distant incluant votre jeton.

Nous allons maintenant créer de nouveaux fichiers et les envoyer vers le dépôt distant.

Dans l’explorer (à gauche) de Visual Studio Code :

    • Clic droit > New file
    • Insérer le code print("Hello") dans ce fichier et sauvegardez-le

Partageons maintenant ce fichier avec le dépôt distant.

Cet envoi se déroule en plusieurs étapes obligatoires :

  1. Déclarez le fichier à Git
  2. Ajoutez-le dans un commit (point de sauvegarde)
  3. Envoyez ce commit au dépôt distant

Voici la suite de commandes à connaitre et exécuter :

Rafraichissez votre dépôt distant sur GitHub et vérifiez que le fichier est bien apparu.

2.5 Pull

Nous venons d’envoyer du code vers le dépôt distant.

Maintenant imaginez que :

  • vous travaillez en équipe
  • un camarade a envoyé une modification sur le dépôt distant
  • vous souhaitez mettre à jour votre dépôt local pour récupérer la modification

Pour simuler ce processus, nous allons directement mettre à jour le dépôt distant.

    • ⚠️ ce n’est pas une bonne pratique mais ici c’est pour l’exercice

Cela vous permet de récupérer sur votre dépôt local la modification faite sur le dépôt distant.

3 Autres points importants

Ce qui a été fait ici n’est que le minimum du minimim à savoir pour utiliser Git.

De nombreux essentiels ont été volontairement mis de côté pour ne pas complexifier ce sujet.

N’hésitez pas à consulter le cours et le TP dispensé aux élèves de 1A (lien ci-dessous).

3.1 Conflit

Par exemple, que se passe-t-il si :

  • Kim a modifié le fichier ex1.py sur son dépôt local et a poussé sa modification vers le dépôt distant
  • Sur votre dépôt local, vous avez également modifié le même fichier
  • Vous essayez de faire git push : vous avez un message disant que vous devez commencer par pull
  • Vous faites donc git pull et là vous avez un conflit i.e. Git ne peut pas décider quelle est la bonne version entre la votre et celle de Kim

flowchart
    github[(Remote)]
    dev1[(Local Kim)]
    dev2[(Local yours)]
    
    github <--> dev1
    github <--> dev2

3.2 Fichier .gitignore

Ce fichier permet de lister des fichiers qui ne doivent pas être versionnés par Git. C’est utilise par exemple pour ne pas envoyer sur le dépôt distant des fichiers contenant des mots de passe ou encore des fichier de données volumineux.

Liens

https://ludo2ne.github.io/Git-tuto/