Partie pratique 2 : Travailler à plusieurs sur un projet

Durée de la session1h15

Pendant cette session, nous aborderons le travail collaboratif avec Git et Gitlab.

Plusieurs sur Gitlab

Ici, nous nous placerons dans des conditions réelles de travail collaboratif en approfondissant les concepts de Git. Vous êtes invités à constituer des binômes (et maximum un trinôme si besoin).

Sur Gitlab, un des membres du groupe crée un projet avec README.md. Ensuite, recherchez et ajoutez les autres membres de son groupe, en leur donnant le statut Maintainer.

Toutes les informations nécessaires sur Gitlab pour effectuer ces étapes peuvent être trouvées ici : Gitlab

Conflits dans Git

Localement, avec Git et VScode, voici les étapes à suivre :

  1. Tous les membres du groupe clone le dépôt Git du projet Gitlab
  2. Un membre ajoute le fichier suivant (nommé calculator.py) au dépôt
    # Small Python Project: Simple Calculator
    def add(a, b):
        return a + b
    
    def subtract(a, b):
        return a - b
    
    def multiply(a, b):
        return a * b
    
    def divide(a, b):
        if b != 0:
            return a / b
        else:
            return "Error: Division by zero."
    
    def main():
        print("Welcome to the Simple Calculator!")
        print("Select an operation:")
        print("1. Add")
        print("2. Subtract")
        print("3. Multiply")
        print("4. Divide")
    
        choice = input("Enter choice (1/2/3/4): ")
    
        if choice in ['1', '2', '3', '4']:
            num1 = float(input("Enter first number: "))
            num2 = float(input("Enter second number: "))
    
            if choice == '1':
                print(f"The result is: {add(num1, num2)}")
            elif choice == '2':
                print(f"The result is: {subtract(num1, num2)}")
            elif choice == '3':
                print(f"The result is: {multiply(num1, num2)}")
            elif choice == '4':
                print(f"The result is: {divide(num1, num2)}")
        else:
            print("Invalid input.")
    
    if __name__ == "__main__":
        main()
    1. Ajoutez le fichier et commitez-le en local
    2. Propagez les changements en les poussant vers le dépôt en ligne
  3. Tout le monde dans le groupe tire maintenant du dépôt en ligne pour obtenir le fichier
  4. Le groupe divise les tâches suivantes entre ses membres :
    1. Tâche 1 : ajouter un opérateur
      • Ajoutez une nouvelle opération, modulus, à la calculatrice. Cette fonction devrait calculer le reste quand le premier nombre est divisé par le second.
      • Éditez le menu pour inclure une option pour l’opération modulus.
    2. Tâche 2 : améliorer la validation des entrées
      • Modifiez la fonction main pour valider les entrées utilisateur pour le choix de l’opération et les nombres.
    3. Tâche 3 : améliorer la qualité du code
      • ajoutez des documentations de fonctions (docstring)
      • indiquez les types des paramètres et du résultat des fonctions.
    1. Ensuite, chaque membre se sépare pour travailler sur sa tâche assignée
    2. Chaque membre ajoute ses modifications à l’index avec la commande add
    3. Puis fait un commit commenté
    4. Puis envoie son commit vers le dépôt distant avec la commande push
    5. Et maintenant ?
Astuce

La commande git status est très utile pour fournir des informations sur l’état d’un dépôt et offre souvent des indices de solution.

Toutes les informations nécessaires sur Git pour effectuer ces étapes peuvent être trouvées ici : Git.

Documentation

Warning

Un projet non documenté est un projet inutilisable !

Gitlab offre plusieurs possibilités pour documenter ses projets, d’un simple fichier readme en format texte minimaliste à un site web personnalisé. Un fichier README.md au format Markdown à la racine du projet sera affiché directement dans Gitlab automatiquement.

Gérer vos dépôts Git depuis VSCode

VSCode intègre une gestionnaire de sources qui vous permet de gérer vos dépôts git. Les répertoires associés à un dépôt Git, avec la présence d’un répertoire caché ‘.git’, sont automatiquement reconnus, mais vous pouvez aussi cloner un dépôt distant à partir de son url, initialiser un dépôt local dans un répertoire ouvert ou le publier, par défaut sur Github, évidemment.

Source control

Connecter VSCode et Gitlab

Si vous souhaitez utiliser le serveur Gitlab, de l’IMT par exemple, installez l’extension Gitlab pour VSCode.

  1. Installez l’extension Gitlab pour VSCode (https://docs.gitlab.com/editor_extensions/visual_studio_code/)

  2. Authentifiez-vous sur le serveur Gitlab de l’école dont l’url est https://gitlab-df.imt-atlantique.fr. Il vous faudra créer un token depuis l’interface de management du serveur Gitlab. Un jeton d’authentification autorise une application à accéder au serveur. Choisissez la portée api offrant un accès complet aux dépôts.

Il vous faudra ensuite mettre en place une authentification par clés SSH entre votre ordinateur de travail et le serveur Gitlab. Pour réaliser une sécurisation asymétrique de vos échanges, deux clefs sont utilisées, une privée à ne jamais divulguer et une publique fournie aux hôtes avec qui vous souhaitez échanger des données.

Sous Windows, la clef se trouve dans le fichier \.ssh\id_ecdsa.pub. Sur un système Unix-like, la clef publique ssh est stockée dans le fichier ~/.ssh/id_rsa.pub.

  1. Déclarez votre clef publique sur le serveur Gitlab-df de l’école. La clef ressemble à quelque chose comme ça :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDTHKUJpKT5vxyZiXkMS3jxqc0ctIcklJPsrEAWXo0LG80sleUkYnELGYN3
R4+SduE0fB7TeaXlY6qMYpkMMM2N5C60ALLt2cAHmeLoK39QAarAuO5WX90LPIVyXM/rCyi5cg1Bm9UMgThmKtV/UbJi6b
FMOw71tasz+ZFP1g0CEyTUc7fOnXto9gZFuyMM2uOqvZpVG7I1jJIjiYDxYcPnABAsm5d1fViEADEwqcohqyOtf9
8DGSh4RoTOnSNRd1BuGXcGYgNPzXnrUaOiZMNP1QdbOfIjXdxkqHyn22J7ArKZblQ0+de+UTru/FBETSV4sGP6eez
dIGikrWRJF/9e7oWurAfk6xVqEecCVkkdSRqqgcClpk1aQGdedS8pDq6JL+eG4UsijaD3scApjkBCrEY1S0PGrDSYd22l/
By4sDsqhuEgMM0OEJFRXNd3ZF8BilLHtzG/4+mBE6t8ZmHNrmz9EoMJPuWqDQr36dedJwH/jnCPnaTLVJC30aWRaLA
+taS1YivogKsnb141U9PC7tr3y8Cn22pGdLB6NouNb6YXGSPvdy5/RUCzYEIYzQWk9FNHfb35/
jAu4jCGbGT4DTZ6BnY79Sp6T3jzZFeeWQMquNMR8KjGTfX2hq86AMx+Tm/EK0mPH2lGyXcAOAHi7VNJkiweBusIdQ== 
toto@mamachine.local

Gestion des dépôts

Travaillez en binôme pour cette partie. En local, sur un des postes, créez un répertoire contenant un fichier texte (de préférence avec du code python). Depuis VSCode, initialisez un dépôt git sur le serveur gitlab-df de l’école.

En binôme, explorez les fonctionnalités de l’extension Gitlab de VSCode pour :

  • tracer les modifications locales non versionnées,
  • versionner des modifications,
  • gérer un conflit sur une même ligne modifiée sur chaque copie locale du dépôt afin d’utiliser les outils de visualisation des différences de VSCode,
  • créer une branche test, la faire évoluer, puis fusionner avec la branche principale.

Appréciez la qualité des commentaires de commit auto-générés.

Historique des versions

Gérer un projet sous Git permet de garder une trace des modifications effectuées par les différents contributeurs. La commande git blame permet de tracer les révisions et les auteurs de ces révisions.

L’extension Gitlab de VSCode simplifie l’usage de cette commande. Voici un scénario mettant en avant l’usage de cette fonctionnalité. Effectuez les actions suivantes sur un fichier du dépôt Git partagé avec votre binôme.

  1. L’étudiant 1 crée une fonction retournant la deuxième plus petite valeur d’une liste et versionne cet ajout.
  2. L’étudiant 2 ajoute des commentaires à cette fonction et versionne cet ajout.
  3. L’étudiant 1 ajoute quelques tests de la fonction.

Depuis votre éditeur VSCode ouvert avec le fichier à jour vis-à-vis du dépôt, accédez aux préférences de l’extension Gitlab dans la barre des tâches (voir image ci-dessous) et activez le suivi de versions à l’aide de l’instruction suivante : git.blame.editorDecoration.enabled

Config Gitlab Extension

Lorsque vous vous positionnez sur une ligne, VSCode indique le message de commit, l’auteur et la date de la dernière modification faite

Après avoir mis en évidence cette fonctionnalité très utile dans une phase de débogage, vous pouvez la désactiver si vous trouvez les indications trop verbeuses en phase de développement.