TD11 - Le versionning

GIT

Durée : 3h

Inès de Courchelle

Objectifs :

  • Partager des documents/des codes avec plusieurs utilisateurs
  • Manipuler GIT et ses commandes de bases
  • Gérer les versions d’un code

Attention :

À chaque étape de programmation, vous devez vérifier si le programme :

  • Compile sans warning
  • Obtient les résultats attendus
  • Avant de coder, il faut écrire un algo avec un papier et un stylo !

    logo

Exo 1 : Seul

0. Créer un répertoire monProjet

mkdir monProjet

1. Créer un dépôt local vide

git init

2. Vérifiez que le dépôt est correctement initialisé

git status

3. Créez un fichier nommé TPGit.c contenant le code suivant :

#include<stdio.h>
#include<stlib.h>
int main(){
    printf("coucou \n");
    return 0;
}

4. Ajoutez le fichier TPGit.c aux fichiers suivis

git add TPGit.c

5. Vérifiez la bonne exécution de la commande précédente

git status

6. Commitez votre nouvelle version avec comme message : Premier commit

git commit -m "ajout du fichier tpgit.c"

7. Modifiez votre code afin qu’il ressemble à :

#include<stdio.h>
#include<stlib.h>
int main(){
    char* nom;
    nom=malloc(sizeof(char)*100);
    printf("Votre nom \n");
    scanf("%s",&nom);
    return 0;
}

9. Regardez les modifications de votre projet

git status

10. Commitez vos modifications

git commit -m "modification du fichier tpgit.c"

11. Revenez à votre premier commit

git checkout <identifiant_du_commit>

Pour obtenir l’identifiant du commit

git log

12. Modifiez le fichier TPGit.c afin d’ajouter les commentaires de fichiers. Par exemple, on pourrait rajouter :

/* Auteur : Inès de courchelle */
/* Date :   06/05/22 */
/* Résumé :  démonstration de GIT*/
/* Entrée(s) : aucunes */
/* Sortie(s) : aucunes */

13. Ajoutez les modifications commit

git commit -m "modification du fichier "

14. Commitez vos modifications

git commit -m "modification du fichier tpgit.c"

Exo 2 : Dépôt distant

0. Générez votre clé ssh

Générer la clé dans votre home-directory
ssh-keygen -t rsa -b 2048 -C 'cle-gitlab-cytech' -N '' -f ~/.ssh/id_rsa
Détails des arguments
  • -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).
  • -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.
  • -C comment un commentaire pour repérer la clé. Aucune fonction sauf de repérage et différenciation.
  • -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é.
  • -f ~/.ssh/id_rsa c’est le fichier dans lequel enregistrer la clé. On choisit ici la valeur par défaut

1. Connectez vous à votre compte GITLAB

Connecter vous à gitlab cytech
CY Tech
Ajouter la clé ssh précédement créée

2. Créez un dépôt distant

3. Cloner votre projet en local

4. Ajouter le fichier TPGit.c dans votre dépôt local

touch TPGit.c

5. Regardez le statut de votre projet

git status

6. Ajoutez ce fichier au prochain commit, puis commitez les changements (vérifier sur GitLab que les changements ont bien été pris en compte)

git add TPGit.c
git commit -m "ajout du fichier TPGit.c "
git push

Exo 3 : Travailler à 2

Souvent on utilise un gestionnaire de versions pour travailler à plusieurs. Cependant quelque soit le gestionnaire de versions, il faut respecter certains principes pour éviter d’avoir à gérer des problèmes d’évolution de version. Si vous ne respectez pas ces principes, vous risquez de vous trouver dans des situations extrêmement complexes.

Le principe de git est que chaque personne travaille sur son dépôt local, puis lorsque son travail est terminé (et donc testé !), elle synchronise son dépôt local avec le dépôt distant. L’ensemble des manipulations sur les dépôts peut être représenté comme sur la figure ci dessous :

Dans le cadre d’un projet, ou de la création d’un logiciel, deux cas de figure sont possibles : - Soit personne n’a pas de code source à partager. Dans ces conditions, il suffit de créer un dépôt distant vide, puis chaque personne va synchroniser ce dépôt distant vide avec un dépôt local non existant. Cela se fait grâce à la commande : git clone - Soit une personne possède des codes sources. Alors il suffit à cette personne de synchroniser son dépôt local avec un dépôt distant. Une fois ce dépôt distant créé, les autres personnes viennent synchroniser leur dépôt local inexistant avec le dépôt distant, grâce à la commande : git clone

ATTENTION La suite de ce TP doit se faire à deux. Afin d’identifier les différents rôles, nous appellerons les deux personnes : étudiant 1 et étudiant 2 !

1. Etudiant 1 : Créez un projet sur GIT, puis clonez le en local. Ajoutez ensuite en local le fichier TPNote.c suivant :

#include<stdio.h>
#include<stlib.h>
int main(){
    int* mesNotes;
    mesNotes=malloc(sizeof(int)*3);
    for (int i=0;i<3;i++){
        printf("notes %d : \n",i);
        scanf("%d",mesNotes[i]);
    }
    return 0;
}

2. Etudiant 1 : Dans gitlab ajoutez, l’étudiant 2 à votre projet

3. Etudiant 2 : Clonez le projet en local chez vous

4. Etudiant 2 : Créez le fichier fonctions.h suivant :

#ifndef __fonctions_H_
#define __fonctions_H_

typedef struct{
  char* nom;
  char* prenom;
  int moyenneGénerale;
  int numeroEtudiant;

}Personne;

#endif

4. Etudiant 2 : Commitez le fichier et synchroniser son dépôt local

5. Etudiant 1 : Créez d’un README.md

Programme permettant de saisir 3 notes.
Les auteurs sont :
- etudiant 1
- etudiant 2

6. Etudiant 1 : Commitez le fichier

7. Etudiant 1 : Synchronisez son dépôt local

8. Etudiant 1 : Que se passe t-il ?

9. Etudiant 2 : Récupérer les modifications de l’étudiant 1

10. Etudiant 1 : Commitez les modfications

Exo 4 : Résoudre les conflits - Modifications différentes

1. Jean-Michel - Alfred : Synchronisez son dépôt local avec le dépôt distant (comme ça ils ont le même)

2. Alfred : Rajoutez au fichier README.md, au tout début la date

----------------
06-05-2022
----------------
Programme permettant de saisir 3 notes.
Les auteurs sont :
- Alfred
- Jean-Michel
Programme permettant de saisir 3 notes.
Les auteurs sont :
- Alfred
- Jean-Michel
--------------------------
©  CY-Tech - pre-ing 1 <3
--------------------------

4. Jean-Michel - Alfred : Commitez les modifications

5. Alfred : Synchronisez le dépôt local

6. Jean-Michel : Synchronisez le dépôt local

7. Jean-Michel - Alfred : Que se passe t-il ?

Exo 5 : Résoudre les conflits - Modifications au même endroit

1. Jean-Michel - Alfred : Synchronisez son dépôt local avec le dépôt distant (comme ça ils ont le même). Utilsez le projet créé à l’exercice précédent.

2. Jean-Michel : Modifiez le fichier TPNote.c comme suit :

/* Auteur : Jean-Michel */
/* Date :   06/05/22 */
/* Résumé : saisir des notes */
/* Entrée(s) : aucunes */
/* Sortie(s) : aucunes */
#include<stdio.h>
#include<stlib.h>
int main(){
    int* mesNotes;
    int nbNotes;
    printf("combien de notes voulez vous saisir ? \n");
    scanf("%d",&nbNotes);
    mesNotes=malloc(sizeof(int)*nbNotes);
    for (int i=0;i<3;i++){
        printf("notes %d : \n",i);
        scanf("%d",mesNotes[i]);
    }
    return 0;
}

3. Alfred : Modifiez le fichier TPNote.c comme suit :

/* Auteur : Alfred */
/* Date :   06/05/22 */
/* Résumé : Créer des notes */
/* Entrée(s) : aucunes */
/* Sortie(s) : aucunes */
#include<stdio.h>
#include<stlib.h>
int main(){
    int* mesNotes;
    int nbNotes;
    mesNotes=malloc(sizeof(int)*3);
    printf("combien de notes voulez vous saisir ? \n");
    scanf("%d",&nbNotes);
    mesNotes=realloc(mesNotes,nbNotes*sizeof(int));
    for (int i=0;i<3;i++){
        printf("notes %d : \n",i);
        scanf("%d",mesNotes[i]);
    }
    return 0;
}

4. Alfred : Synchronisez le dépôt local

5. Jean-Michel : Synchronisez le dépôt local

6. Jean-Michel - Alfred : Que se passe t-il ?

Allez plus loin : de la config

Avant d’utiliser git, il faut le configurer, afin qu’il s’adapte à vos besoins. Pour ce faire, il faut d’abord déclarer votre identité :

  git config --global user.name "<Votre nom>"
  git config --global user.email "<Votre mail>"

Puis configurez : votre éditeur favori, votre outil de visualisation de différence, vos préférences de coloration du shell :

  git config --global color.ui auto
  git config --global core.editor <votreEditeur>
  git config --global merge.tool <vimdiff>
  git config --global core.pager <cat>

Ce qui donne dans mon cas :

  git config --global user.name "Inès DC"
  git config --global user.email "ide@cy-tech.fr"
  git config --global color.ui auto
  git config --global core.editor emacs
  git config --global merge.tool vimdiff
  git config --global core.pager cat