lsname: inverse layout: true class: center, middle, inverse --- # Inès de Courchelle ## Le versionning ## 2023-2024 ![image](../img/CY-tech.png) --- layout: false # Aujourd'hui ## Objectifs 1. Comprendre le travail en équipe 2. Partager son code dans une équipe 3. Connaître les logiciels 4. Utiliser GIT --- # Une équipe IT ## De nos jours dans les projets informatiques - Le CTO (Chief Technical Officer) : c'est le chef de projet, son rôle est de piloter - Le PO (Product owner) : il collecte les besoins métiers des utilisateurs - Le Designer UX/UI : Travail autour des questions : comment ça vient à l’utilisateur (UX) et à quoi ça ressemble (UI) ? - Les développeurs : ils réalisent l'application ## D'un point de vu programmation
--- # Des méthodes de projets ## Un logiciel - Suivre un cycle de vie - Possèder une équipe de travail - Répartir les tâches dans le temps
--- # Cycle de vie ## Définition - Diviser pour mieux régner (modélisation des activités, activités successives) - Représenter l’analyse logiciel sous forme graphique et logique ## Démarche de réalisation - Étude préalable - Étude détaillée - Réalisation - Mise en oeuvre livraison (Recettes, maintenances/évolutions) --- # Démarche de réalisation ## 1. Étude préalable - Analyser le fonctionnement de l’organisation et diagnostic général de l’existant - Recenser les critiques et des besoins des utilisateurs (sans considération technique) point de vue métier - Dialoguer avec le client l’aider à formaliser le problème à résoudre - Étudier la faisabilité des automatisations - Écrire un cahier des charges
--- # Démarche de réalisation ## 2. Étude détaillée - Élaborer une solution conceptuelle, indépendante de tout moyen informatique - Écrire des documents précis spécifiants les fonctionnalités attendues
--- # Démarche de réalisation ## 3. **Réalisation** - Programmer le système informatique - Réaliser les Tests unitaires et intégrations
--- # Démarche de réalisation ## 4. Mise en oeuvre livraison - Démarrer le système (après validation des clients) - Former les utilisateurs - Conduire au changement - Exploiter et maintenir le système
--- # Différents cycle de vie logicielle - Cascade - V - iteratif - ...
![alt-text](https://media.giphy.com/media/Lp71UWmAAeJHi/giphy.gif)
--- # Cycle de vie en cascade
## Analyse - Analyse de l’existant et définitions des besoins du système d’information et du logiciel - Élaboration d’un cahier des charges --- # Cycle de vie en cascade
## Conception - Modélisation du système d’information et du logiciel - Élaboration d’un cahier des charges --- # Cycle de vie en cascade
## Réalisation - Programmation - Mise en place des algorithmes --- # Cycle de vie en cascade
## Tests - Vérification et validation du logiciel - Vérification et validation du système d’information --- # Cycle de vie en cascade
## Exploitation et maintenance - Utilisation du logiciel une fois installé - Correction des erreurs - Amélioration des fonctionnalités existantes - Ajout de fonctionalités --- # Cycle de vie en cascade
## Utilisation de ce modèle - Projet de courte durée - Peu de participant - Phase de programmation courte --- # Cycle de vie en V
--- # Cycle de vie iteratif
--- # Gestion du temps ## Organisation .pull-left[ #### Répartition des tâches - Qui fait quoi ? - Qui ajoute quoi ? - Quand est ce qu'on l'ajoute ? #### Des plannings À chaque projet (même à l'école) - Réaliser un planning prévisionnel (au début) - Réaliser un planning réel (à la fin) ] .pull-right[ #### Pourquoi - Comprendre les écarts - Analyser les problèmes rencontrés - Apprendre de ses erreurs #### Des outils - Gantproject - Google Agenda - Tableurs - ... ] --- # Les méthodologies de projets ## La Tendance ! Agile, Scrum ...
[source : reddit programmer humor](https://www.reddit.com/r/ProgrammerHumor/)
## Pas de panique vous allez avoir des cours dessus --- # Coder à plusieurs ## C'est quoi ? - Collaborer sur la création d'un logiciel - Partager un projet - Modifier/Ajouter/Supprimer du code ## Quelles sont les problématiques ? - Comment partager un projet à un instant t ? - Comment mettre en place un outil pour travailler chacun sur sa machine - Comment revenir à la version antérieure qui fonctionnait (avant les modifs d'un collaborateur) ? - Comment envoyer un morceau de programme à un collaborateur ? - Comment ... --- # Les outils à dispo ## Un gestionnaire de version #### Définition Un programme permmettant aux développeurs de conserver un historique où ont lieu les modifications qui ont été réalisées et des versions de tous leurs fichiers #### Objectifs - Garder en mémoire chaque modificiation - Savoir la date où à lieu les modification - Connaître les personnes qui ont réalisées les modifications --- # Un gestionnaire de version ## Fonctionnalités - Revenir à des versions précédentes - Suivre l’évolution du développement - Travailler à plusieurs sans supprimer les modifications des autres collaborateurs ## Listes de gestionnaire de version - Client-serveur : SVN - Modèle distribué : GIT - Une liste .arrow[]
ici
--- # Un gestionnaire de version ## Client Serveur VS Modèle distribué
--- # Un gestionnaire de version ## Dans le cadre de ce cours #### Choix : Modèle distribué - Disposer d'un référenciel centralisé - Travailler sans disposer d'un serveur #### Logiciel : GIT - Utiliser dans beaucoup d'entreprise - Obtenir une meilleur protection des données - Développer pour les noyaux linux - Faciliter d'utilisation des branches (on va voir ce que c'est) --- # GIT ## Définition - Logiciel de gestion de version décentralisé - Créateur : Linus Torvalds .pull-left[
] .pull-right[
]
## Objectifs - Faciliter le travail en équipe - Optimiser notre propre travail - Faire un parallèle entre gestion de projet et développement --- # GIT ## Principes 1. Produire un historique 2. Isoler les blocs de développement 3. Organiser la méthodologie de développement 4. Améliorer la qualité (surtout des tests) ## Décentralisé L'historique complet du code n’est pas conservé dans un unique emplacement --- # GIT solo ## Plusieurs étapes 1. Créer un dépôt local 2. Vérifier que le dépôt local est correctement initialisé 3. Écrire les fichiers du projet 4. Ajouter les fichiers au dépôt 5. Vérifier que la commande a bien fonctionné 6. Enregistrer l'état du code dans le contrôle de version --- # GIT solo ## Plusieurs étapes 1. .under[Créer un dépôt local] 2. Vérifier que le dépôt local est correctement initialisé 3. Écrire les fichiers du projet 4. Ajouter les fichiers au dépôt 5. Vérifier que la commande a bien fonctionné 6. Enregistrer l'état du code dans le contrôle de version --- # GIT solo ## 1. Création d'un dépôt local #### Dépôt Local - Constituer la zone de stockage virtuel de votre projet (un répertoire) - Permettre de stocker au fur et à mesure les fichiers de votre projet #### Dépôt Distant - Utiliser pour stocker les différentes versions du projet - Garder un historique délocalisé, hébergé sur Internet ou autre #### La commande ```bash git init ``` --- # GIT solo ## 1. Création d'un dépôt local
--- # GIT solo ## Plusieurs étapes 1. Créer un dépôt local 2. .under[Vérifier que le dépôt local est correctement initialisé] 3. Écrire les fichiers du projet 4. Ajouter les fichiers au dépôt 5. Vérifier que la commande a bien fonctionné 6. Enregistrer l'état du code dans le contrôle de version --- # GIT solo ## 2. Vérifier que le dépôt local est correctement initialisé #### Pourquoi ? - Analyser le résultat de la commande précédente s'est bien passé - Vérifier qu'on n'a pas fait de doublons #### La commande ```bash git status ``` --- # GIT ## 2. Vérifier que le dépôt local est correctement initialisé
--- # GIT solo ## Plusieurs étapes 1. Créer un dépôt local 2. Vérifier que le dépôt local est correctement initialisé 3. .under[Écrire les fichiers du projet] 4. Ajouter les fichiers au dépôt 5. Vérifier que la commande a bien fonctionné 6. Enregistrer l'état du code dans le contrôle de version --- # GIT solo ## 3. Écrire les fichiers du projet #### Comme d'habitude
#### La commande ```bash touch monProjet.c mesFonctions.h mesFonctions.c ``` --- # GIT solo ## 3. Écrire les fichiers du projet
--- # GIT solo ## Plusieurs étapes 1. Créer un dépôt local 2. Vérifier que le dépôt local est correctement initialisé 3. Écrire les fichiers du projet 4. .under[Ajouter les fichiers au dépôt] 5. Vérifier que la commande a bien fonctionné 6. Enregistrer l'état du code dans le contrôle de version --- # GIT solo ## 4. Ajouter les fichiers au dépôt #### Objectif Indiquer au dépôt local que l'on souhaite rajouter ses fichiers à notre projet #### La commande ```bash git add monProjet.c git add mesFonctions.h git add mesFonctions.c ``` --- # GIT solo ## 4. Ajouter les fichiers au dépôt
--- # GIT solo ## Plusieurs étapes 1. Créer un dépôt local 2. Vérifier que le dépôt local est correctement initialisé 3. Écrire les fichiers du projet 4. Ajouter les fichiers au dépôt 5. .under[Vérifier que la commande a bien fonctionné] 6. Enregistrer l'état du code dans le contrôle de version --- # GIT solo ## 5. Vérifier que la commande a bien fonctionné #### Pourquoi ? - Analyser le résultat de la commande précédente s'est bien passé - Vérifier qu'on n'a pas fait de doublons #### La commande ```bash git status ``` --- # GIT solo ## 5. Vérifier que la commande a bien fonctionné
--- # GIT solo ## Plusieurs étapes 1. Créer un dépôt local 2. Vérifier que le dépôt local est correctement initialisé 3. Écrire les fichiers du projet 4. Ajouter les fichiers au dépôt 5. Vérifier que la commande a bien fonctionné 6. .under[Enregistrer l'état du code dans le contrôle de version] --- # GIT solo ## 6. Enregistrer l'état du code dans le contrôle de version ## Objectifs - Valider vos fichiers en local - Envoyer les modifications au dépôt distant ## Commande ```bash git commit -m "le commentaire" ``` #### ATTENTION Ne pas négliger le contenu du message ## Pourquoi ?? Permettre de suivre l'évolution du projet à travers les commits --- # GIT solo ## 6. Enregistrer l'état du code dans le contrôle de version
--- # GIT à plusieurs ## Partager le code au serveur distant #### Problèmatiques - Les commandes GIT : tout cela se passe localement sur votre ordinateur. - On peut donner des accès sur un réseau local, mais ... ## Le schema
--- # GIT à plusieurs ## Partager le code au serveur distant #### Problèmatiques - Les commandes GIT : tout cela se passe localement sur votre ordinateur. - On peut donner des accès sur un réseau local, mais ... ## Le schema
--- # Gestionnaire de version ## Objectif Partager mon code ## Comment ? Un répertoire partagé ## Avec quoi ? - Des solutions cloud et de services lignes - Exemples : GitLab, GitHub ... --- # GitLab vs GitHub ## GitLab .pull-left[ - Entreprise GitLab inc - Techno ruby - Créer par Dmitriy Zaporozhets et par Valery Sizov (Ukraine) ] .pull-right[
]
## GitHub - Entreprise de microsoft - Basé à San francisco - Technos : Javascript, Golang, Ruby, C ...
--- # GitLab vs GitHub ## Pas bcp de différences - La plupart de ce que GitLab propose, GitHub l’a aussi - Aller plus loin .arrow[] [ici](https://kinsta.com/fr/blog/gitlab-vs-github/#les-bases-de-git-et-des-dpts-git-bass-dans-le-cloud)
source : gitlab.com
--- # NOUS ## On va utilisé ?
## Pourquoi ? - Car on un accès, avec l'école - Il fait partie de la liste des logiciels intégrés à l'école - Plutôt cool ! Nan ?
--- # GitLab ## Illustration
--- # GitLab ## Définition - Plateforme Git et DevOps - Basée sur le cloud qui aide les développeurs à surveiller, tester et déployer leur code. ## Principes - Héberger les projets et la gestion de versions des codes sources - Gérer le processus de développement - Collaborer avec plusieurs développeurs --- # GitLab et CY Tech ## Le Portail
CY Tech
## La doc de l'école Pour travailler depuis chez vous .arrow[]
La doc
--- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. Ajouter la clé à Git Lab 3. Créer un projet 4. Initialiser votre dépot 5. Cloner votre projet en local 6. Envoyer les modifications sur le serveur distant 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Plusieurs étapes 1. .under[Générer une clé ssh] 2. Ajouter la clé à Git Lab 3. Créer un projet 4. Initialiser votre dépot 5. Cloner votre projet en local 6. Envoyer les modifications sur le serveur distant 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Générer une clé ssh #### Générer la clé dans votre home-directory ```shell ssh-keygen -t rsa -b 2048 -C 'cle-gitlab-cytech' -N '' -f ~/.ssh/id_rsa ``` #### Détails des argumesnts - .under[-t rsa] la clé générée est une clé utilisant le chiffrement RSA. Vous pouvez utiliser DSA (moins sécurisé) ou ECDSA (sécurité équivalente à RSA, mais clés moins longues, donc plus performant). - .under[-b 2048] la taille (en bits) de la clé générée. 2048 est considéré sûr pour le moment en RSA. Une clé ECDSA de niveau de sécurité équivalent serait à 384 bits. - .under[-C] comment un commentaire pour repérer la clé. Aucune fonction sauf de repérage et différenciation. - .under[-N] passphrase il est de bon usage de mettre une phrase de sécurité pour pouvoir utiliser des clés de chiffrement. Cependant, pour vous faciliter les choses, cette option ne mets pas de phrase de sécurité pour utiliser la clé. - .under[-f ~/.ssh/id_rsa] c'est le fichier dans lequel enregistrer la clé. On choisit ici la valeur par défaut --- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. .under[Ajouter la clé à Git Lab] 3. Créer un projet 4. Initialiser votre dépot 5. Cloner votre projet en local 6. Envoyer les modifications sur le serveur distant 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Ajouter la clé à Git Lab #### Connecter vous à gitlab cytech
CY Tech
#### Enregistrer la clé public - Enregistrer la clé public dans vos préférences - La clé public est dans le home-directory dans le répertoire .under[.ssh] et dans le fichier .under[id_rsa.pub] --- # GIT à plusieurs ## Ajouter la clé à Git Lab #### VAR
--- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. Ajouter la clé à Git Lab 3. .under[Créer un projet] 4. Initialiser votre dépot 5. Cloner votre projet en local 6. Envoyer les modifications sur le serveur distant 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Créer un projet #### C'est du clic et du clic
--- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. Ajouter la clé à Git Lab 3. Créer un projet 4. .under[Initialiser votre dépot] 5. Cloner votre projet en local 6. Envoyer les modifications sur le serveur distant 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Initialiser votre dépot
--- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. Ajouter la clé à Git Lab 3. Créer un projet 4. Initialiser votre dépot 5. .under[Cloner votre projet en local] 6. Envoyer les modifications sur le serveur distant 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Cloner votre projet en local #### La commande ```shell git clone
``` #### VAR
--- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. Ajouter la clé à Git Lab 3. Créer un projet 4. Initialiser votre dépot 5. Cloner votre projet en local 6. .under[Envoyer les modifications sur le serveur distant] 7. Ajouter des membres à votre projet --- # GIT à plusieurs ## Envoyer les modifications sur le serveur distant #### Les commandes ```shell git add toto.c git add toto.h git commit -m "ajout de fichiers toto" git push ``` #### VAR
--- # GIT à plusieurs ## Plusieurs étapes 1. Générer une clé ssh 2. Ajouter la clé à Git Lab 3. Créer un projet 4. Initialiser votre dépot 5. Gérer votre projet (GIT solo) 6. Envoyer les modifications sur le serveur distant 7. .under[Ajouter des membres à votre projet] --- # GIT à plusieurs ## Ajouter des membres à votre projet
#### Attention Si vous ne vous êtes jamais connecté sur gitlab de cytech alors vous n'apparaîtrez pas dans la barre de recherche #### Ajouter des membres à votre projet
de la doc
--- # GIT ## Mini Bilan - Un dépôt est dossier qui conserve un historique des versions et des modifications - Le dépôt est local ou distant #### Un dépôt local Dossier sur sa machine où on stocke : - Une copie d’un projet - Ses différentes versions - Historique des modifications #### Un dépôt distant - Dossier est une version dématérialisée du dépôt local - Il permet de centraliser le travail des développeurs dans un projet collectif --- # Les branches ## Définition - Une branche correspond à une copie de votre code principal à un instant T - La branche principale est appelée la branche **master** ou **main** ## Objectifs - Obtenir des branches pour tester des idées de codes, d'algo, ... - Garder une branche (main ou master) fonctionnelle ## Principe Faire les modifications dans une branche annexe que l'on peut développer, sans prendre le risque de modifier la branche main/master. --- # Les branches ## La branche main/master - Branche principale commune à tout le monde - Possède des fonctionnalités qui marchent ! ## Surtout Il ne faut jamais travailler directement sur la branche **master** --- # Les branches ## Des commandes #### Connaître les branches ```bash git branch ``` #### Créer une branche ```bash git branch nomDeLaBranche ``` #### Changer de branche ```bash git checkout ma-branche Switched to branch 'ma-branche' ``` --- # Création de branches ## Que se passe-t-il ? - Cela créé un nouveau pointeur vers le commit courant - ... - Hein ? ## Exemple - Step 1 On considère l'historique suivant :
--- # Création de branches ## Exemple - Step 2 On créé une nouvelle branche ```bash git branch maBranche git checkout maBranche ```
--- # Création de ranches ## Exemple - Step 3 On réalise des modifications et on enregistre les modifications ```bash git commit -a -m "test de résolution" ```
--- # La fusion ## Définition
## La commande ```bash git merge ``` ## Objectifs - Fusionner 2 branches ensembles - Intégrer les modifications d'une branche à la branche principale --- # La fusion ## La commande ```bash git checkout main git merge maBranche ```
--- # Les conflits ## Modification en parallèle - Modification d'un même fichier à des endroits différents - Modification d'un même fichier au même endroit ## Comment les gérer ? #### Modification d'un même fichier à des endroits différents RAS, les 2 modifications existeront #### Modification d'un même fichier au même endroit
--- # Les conflits ## Gérer un conflit - Les lignes du fichier en "conflit" apparaîtront entre <<<<<< >>>>>> - C'est au développeur de choisir la bonne modification --- # GIT ## Workflow
--- # Des liens utiles ## Un peu de tout
OpenClassRoom
## Branches
Git Branch
## GitLab CY-Tech
CY Tech
## Doc CY-Tech
La doc