Git, Exemple d’Application
Les TP sont prévus pour être réalisés en étant connecté à votre VM ENSAI, soit depuis les clients légers des salles info, soit via https://view.ensai.fr/. Vous y disposez de tous les outils nécessaires :
Python 3.10
: la version de Python installée à l’ENSAI- ainsi que les packages nécessaires
Visual Studio Code
: votre éditeur de codeGit
: pour gérer vos dépôtsPostgreSQL
: une base de donnéesDBeaver
: pour consulter, modifier cette base de données
À moins que vous ne maîtrisiez des outils tels Docker pour créer votre base de données, il est fortement déconseillé de coder sur votre propre machine que ce soit en TP ou en projet. Vous allez perdre un temps considérable en installation et configuration. Et même si vous êtes très très doués certaines parties ne pourront de toute manière pas fonctionner.
À faire à la maison
Un prérequis de ce TP est que votre configuration Git
soit opérationnelle.
Si vous avez besoin de vous rafrîchir la mémoire sur Git, suivez ce lien.
Compte GitHub
Config Git
Si les valeurs user.name et user.email sont bien renseignées, tout est ok.
Si ce n’est pas le cas, exécutez une à une les 5 commandes git config.
Clé SSH
Si le fichier existe et que cela renvoie un réultat commençant par ssh-rsa, cela signifie que vous avez bien défini une clé SSH sur votre machine.
Dans le cas contraire, créez une clé SSH
Nous allons maintenant vérifier si vous avez bien déclaré cette clé publique sur GitHub, ou sinon l’ajouter
-
- Title : VM ENSAI
- Key : Collez votre clé
Soit votre clé publique est maintenant déclarée à GitHub, ou au pire, GitHub vous dira qu’il connait déjà cette clé.
Objectifs
Les objectifs de ce premier TP sont les suivants :
- Utilisation de Git
- Prise en main de VS Code
- Comprendre comment fonctionne une application
Ce TP mêle explications et phases de code.
Les explications de ce TP ne doivent pas prendre le pas sur celles de votre intervenant. Prenez les comme une base de connaissance pour plus tard, mais préférez toujours les explications orales.
1 Création des dépôts
Pour ce premier TP, vous allez travailler avec votre équipe projet sur un seul et même dépôt distant.
Un membre de l’équipe va créer un dépôt sur GitHub et ensuite tous les membres (le créateur du dépôt GitHub inclus) vont créer leurs dépôt locaux en clonant ce dépôt distant.
1.1 Le dépôt distant
Un seul membre de l’équipe crée ce dépôt distant.
-
- Un fork est une copie d’un dépôt, permettant à un utilisateur de développer indépendamment sans affecter l’original
-
- Sur la page du dépôt > ⚙️ Settings > Collaborators >
1.2 Les dépôts locaux
Maintenant, chaque membre de l’équipe va créer sur sa propre machine, son clone du dépôt.
Commençons par créer un dossier pour ranger votre dépôt local :
-
- Elle crée l’arborescence demandée (mkdir)
- Puis elle vous positionne dans ce dossier (cd)
-
- Lorsque vous êtes sur la page GitHub du dépôt, cliquez sur , puis sur l’onglet SSH
- Copiez l’url qui commence par
git@github.com...
- Dans Git Bash :
git clone <url>
(en remplaçant <url>)
Votre clone est prêt, vous pouvez vérifier sa présence via l’explorateur Windows (WIN + E, puis allez dans le dossier P:\Cours2A\UE3-Complements-info\TP1
).
-
- Si tout s’est bien passé
- Vous allez retrouver ensuite le même Git Bash, qui est intégré dans VS Code
2 Visual Studio Code
2.1 Ouvrir le dépôt
Un dépôt est un ensemble de dossiers et de fichiers. Pour consulter et éditer ces fichiers, vous allez utiliser Visual Studio Code, un éditeur très populaire.
Au lieu de VS Code, vous pouvez tout à fait ouvrir vos fichiers avec le bloc-notes, mais vous vous rendrez rapidement compte que c’est beaucoup moins pratique.
-
- File > Open Folder
- Allez dans le dossier
P:\Cours2A\UE3-Complements-info\TP1
- Cliquez une seule fois sur 📁 ENSAI-2A-complement-info-TP
- Puis sur le bouton
-
- L’Explorer, à gauche, permet d’explorer l’arborsence des fichiers et dossiers
⚠️ Si le dossier parent n’est pas le bon, recommencez l’Open Folder où vous aurez de gros soucis par la suite !!!
2.2 Contenu du dépôt
Ce dépôt contient les éléments suivants :
Élément | Description |
---|---|
.vscode |
Contient les paramètres VS Code pour ce projet |
src |
Dossier contenant les fichiers Python rangés dans une arborescence respectant la programmation en couches |
.gitignore |
Liste des fichiers à ne pas versionner avec git |
LICENSE |
Définit les droits d’utilisation du dépôt |
README.md |
Contient des informations utiles pour présenter, installer et utiliser l’application |
requirements.txt |
Liste les packages Python nécessaires |
2.3 La config VSCode
VS Code est hautement paramétrable, aussi bien au niveau User qu’au niveau Workspace (i.e. considérons que Workspace = dépôt).
Ce fichier contient du paramétrage pour le dépôt, par exemple :
- Le formattage automatique lorsque vous sauvegardez un fichier Python
- Le formateur utilisé est Black
- La taille des lignes est limitée à 100 caractères
- Les tabulations sont remplacées par 4 espaces
- Le dossier source se nomme
src
- Pour importer des modules, ce dossier src sera la racine
- le terminal par défaut est Git Bash
3 Git
Vous allez maintenant faire quelques manipulations basiques avec Git :
- Ajouter des fichiers au dépôts
- Créer des points de sauvegarde
- Envoyer vos modifications locales vers les dépôts distant
- Mettre à jour votre dépôt local
3.1 Routine Git
-
- Terminal > New Terminal (ou CTRL + ù)
-
python src/__main__.py
-
<prenom>.py
= 0, 5 a, b for i in range(b): print(" " * a, end="") += 1 a print("Bonjour <prenom>")
L’enchainement des commandes Git devra devenir un automatisme.
Si lors du push, vous avez ce message, c’est qu’il faut commencer par pull.
To https://github.com/ludo2ne/ENSAI-2A-complement-info-TP.git
Merge branch 'main' of https://github.com/ludo2ne/ENSAI-2A-complement-info-TP
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/ludo2ne/ENSAI-2A-complement-info-TP.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first merge the remote changes (e.g.,
hint: 'git pull') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
3.2 Résoudre un conflit
-
- ne pas modifier les noms des fichiers, uniquement le code à l’intérieur
print("Bonjour <prenom>")
➡️print("Bonjour Marie-<prenom>")
- Et il add, commit et push
- ne pas modifier les noms des fichiers, uniquement le code à l’intérieur
-
print("Bonjour <prenom>")
➡️print("Bonjour Anne-<prenom>")
- Et ils add, commit, pull et push
Normalement un conflit survient lors du pull. En effet il y a un conflit de version
Version | Code |
---|---|
Version originale | print("Bonjour <prenom>") |
Votre modification | print("Bonjour Anne-<prenom>") |
Version sur le dépôt distant | print("Bonjour Marie-<prenom>") |
<<<<<<< HEAD
print("Bonjour Anne-<prenom>") # Votre modification - current change
=======
print("Bonjour Marie-<prenom>") # La modification du dépôt distant - incoming change
>>>>>>>
-
- Soit en cliquant sur Accept Current Change
- Soit en supprimant
print("Bonjour Marie-<prenom>")
, ainsi que les<<<<<<<
,=======
et>>>>>>>
Avoir un conflit, ce n’est pas grave !
Avoir un conflit, ce n’est pas grave !
Avoir un conflit, ce n’est pas grave !
Conflit ≠ Erreur
Cela arrive simplement quand Git rencontre 2 versions et il n’a pas de 🔮, ni de 🎲 pour choisir laquelle est la bonne.
Pour éviter les conflits, organisez-vous avec votre équipe pour éviter autant que possible de travailler sur les mêmes fichiers en même temps.
4 Un exemple d’application
Pour comprendre comment est construit une application découpée en couches, vous allez étudier un exemple simple.
Suivez les instructions du README pour :
Le README est disponible :
- en bas de la page GitHub du dépôt distant (mis en forme)
- sur votre dépôt local, fichier README.md (version brute)
2 types d’applications peuvent vous être demandés en projet :
- Une application de Menu
- l’utilisateur navigue dans des menus
- Un webservice
- l’application expose des endpoints
- l’utilisateur peut interroger ces endpoints et récupérer les résultats
4.2 Un webservice
Nous reviendrons plus en détail sur les webservices lors du TP3.
Pour les autres types de requêtes http (PUT, POST, DELETE), le navigateur ne suffit pas.
Vous verrez comment réaliser ces requêtes dans un prochain TP.
5 Créez votre répo projet
Un membre de l’équipe :
-
- Repository name : par exemple ENSAI-Projet-info-2A
- Public ou Privé, comme vous voulez
- Cochez Add a README file
- .gitignore : Python
- Choose a license : au choix Apache, GNU ou MIT
Ensuite, chaque membre de l’équipe :
-
- doc/suivi/2024.09.12-semaine1.md : le premier point hebdo
- src/main.py : le fichier pour lancer votre application
- requirements.txt : le fichier listant les packages
Par la suite, vous veillerez à ce que votre dépôt soit « bien rangé », de la même manière que celui vu dans la partie précédente.
5.1 Le fichier .env
Ce fichier contiendra des variables d’envrionnement qui serviront par exemple pour vous connecter à la base de données PostgreSQL.
Il suffit qu’un seul membre de l’équipe modifie le fichier adéquat, push et ensuite les autres pull.
Conclusion
Le but de ce TP était de vous remettre en jambe concernant l’utilisation de Git, ainsi que de vous faire découvrir et comprendre comment fonctionne une application découpée en couche.