Partie pratique 2 : Travailler à plusieurs sur un projet
Durée de la session1h15Pendant 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 :
- Tous les membres du groupe
clone
le dépôt Git du projet Gitlab - 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()
- Ajoutez le fichier et commitez-le en local
- Propagez les changements en les poussant vers le dépôt en ligne
- Tout le monde dans le groupe tire maintenant du dépôt en ligne pour obtenir le fichier
- Le groupe divise les tâches suivantes entre ses membres :
- 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.
- Ajoutez une nouvelle opération,
- 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.
- Modifiez la fonction
- 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.
- ajoutez des documentations de fonctions (
- Ensuite, chaque membre se sépare pour travailler sur sa tâche assignée
- Chaque membre ajoute ses modifications à l’index avec la commande
add
- Puis fait un
commit
commenté - Puis envoie son commit vers le dépôt distant avec la commande
push
- Et maintenant ?
- Tâche 1 : ajouter un opérateur
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
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.
- Syntaxe Markdown : https://docs.framasoft.org/en/grav/markdown.html
- Spécificités Gitlab : https://docs.gitlab.com/ee/user/markdown.html
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.
Connecter VSCode et Gitlab
Si vous souhaitez utiliser le serveur Gitlab, de l’IMT par exemple, installez l’extension Gitlab pour VSCode.
-
Installez l’extension Gitlab pour VSCode (https://docs.gitlab.com/editor_extensions/visual_studio_code/)
-
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
.
- 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.
- L’étudiant 1 crée une fonction retournant la deuxième plus petite valeur d’une liste et versionne cet ajout.
- L’étudiant 2 ajoute des commentaires à cette fonction et versionne cet ajout.
- 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
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.