User Tools

Site Tools


2018_2019:s3:methodo:td:git

This is an old revision of the document!


Gestion de versions (Hands-on Git)

Un logiciel de contrôle de version permet de conserver un historique des modifications apportées sur des fichiers tout en offrant la possibilité de revenir à une version antérieure. Il existe des logiciels de contrôle de version centralisés et décentralisés.

Dans le cadre des cours de Conception et de Méthodologie de la production d’applications, nous allons utiliser Git.

I. A chacun son projet dans gitlab

Utilisation de Gitlab

  1. Connectez-vous à https://git-iutinfo.unice.fr/ (Compte de l'université)
  2. Créez un projet (un par binôme au minimum) (bouton vert à droite “new project”)
  3. Ajoutez un de vos camarades à ce projet (vous pourrez revenir sur ce point plus tard).
  4. Commencez par définir votre environnement et créez le README.md
    1. Placez-vous bien dans le répertoire sur votre machine où vous désirez garder un lien avec le dépôt distant.
    2. Exécutez et comprenez pas à pas les instructions qui vous sont données sous détails pour définir la configuration globale et créer le dépôt et ce faisant répondez aux questions suivantes :
      1. “git clone …” qu'est-ce qui a été modifié dans votre répertoire (pensez aux fichiers cachés).
      2. utilisez “git status” avant et après les instructions “git” pour expliquer ce qui change.
  5. Sur le site web, vous constatez quelles modifications ?
  6. Le fichier Readme.MD peut être modifié directement à partir du site web à présent.Pour mieux comprendre la syntaxe
  7. N'oubliez pas de commiter vos modifications.
  8. Est-ce que le contenu du fichier a été modifié sur votre machine?
  9. Exécutez la ligne de commande suivante
     git pull 

    et maintenant que contient le fichier README sur votre machine?

OK vous êtes prêts à synchroniser vos fichiers entre votre répertoire local et le dépôt distant.

II. Apprentissage de Git en lignes de commandes

Basé sur le TD élaboré par Cyril Cecchinel

Et l'aide de Open Classroom pour gérer les configurations.

Une heure maximum sur cette partie. Si besoin laissez une partie pour la faire seul plus tard.

Lignes de commandes

Créer/Récupérer un nouveau dépôt (info)

A ne pas faire dans le cadre de ce TD car nous l'avons déjà fait, cependant, cela peut être utile par la suite.

Pour commencer à travailler avec Git, il y a deux solutions :

  • soit vous créez un nouveau dépôt vide, si vous souhaitez commencer un nouveau projet
     git init 
  • soit vous clonez un dépôt existant, c’est-à-dire que vous récupérez tout l’historique des changements d’un projet pour pouvoir travailler dessus. C'est ce que nous avons déjà fait, par l'instruction
     git clone adresse_du_dépôt_distant 

A noter, que si vous travaillez sous Github ou BitBucket, en général, on crée le dépôt sur le site puis on le clone, comme nous l'avons fait précédemment.

Git comme historique des modifications

  1. Créer un fichier Menu.txt contenant les plats de votre restaurant favori, ligne par ligne.
    Salade norvégienne
    Œufs fauchés
    Steak tartare
    Filet de dorade
    Profiteroles
  2. Comment interprétez-vous le résultat de la commande suivante
     git status 
  3. Ajoutez le fichier Menu.txt comme git vous l'a dit :
     git add Menu.txt
  4. Réinterprétez le résultat de la commande git status.
  5. Le fichier Menu.txt est maintenant prêt à être versionné.
     git commit -m "construction de la carte" 

    ou

     git commit 

    1) Quel message avez-vous en retour?

  6. Que donne la commande git status ?
  7. Apportez quelques modifications au fichier Menu.txt. Essayez de commiter ces modifications. Que se passe-t-il ? En vous aidant de la documentation accessible en tapant git help commit, versionnez ces modifications (avec un message décrivant le changement) 2)
  8. Affichez l’historique des modifications du dépôt.
     git log 

    Et pour voir les modifications apportées par le dernier commit

     git log -p  -1 

    et savoir qui fait quoi

     git log --stat 

    ou

     git log --pretty=format:"%h - %an, %ar : %s"

    etc.

  9. En utilisant git diff , visualisez les modifications effectuées entre le premier commit et le second commit. Par exemple
     git diff 71cfcd6 0c24491 

    Attention l'ordre des commits modifie le résultat (un- devient un +).

  10. Modifiez plusieurs fois le Menu afin d’en avoir plusieurs versions.
  11. Le dernier plat ajouté ne vous plait finalement pas. Il existe deux manières de revenir à une version antérieure : de manière temporaire ou définitive.
  12. Exécuter git log et récupérez le hash (HASH) du commit où vous souhaitez revenir en arrière.
    1. Pour revenir en arrière de manière temporaire, exécutez
       git checkout HASH
      1. Vérifiez que votre fichier Menu.txt est dans son état antérieur.
      2. Revenez au dernier commit (HEAD) en exécutant
         git checkout master
    2. Pour revenir en arrière de manière définitive, et donc supprimer tout ce que vous avez fait depuis ce moment :
       git reset --hard HASH 
      1. Dans git log, vérifiez que tout ce que vous aviez effectué depuis ce commit a été effacé.

Branches de développement

Sauf indication contraire, vous ajouterez les plats séquentiellement dans le menu (les uns après les autres).

Vous êtes chargé(e) d’introduire des plats végétariens dans le menu du restaurant. Ces plats n’ayant pas encore été validés par la cuisine et la direction du restaurant, vous souhaitez travailler sur la carte sans casser la carte existante. La notion de branche permet de passer instantanément d’une version « stable » (branche « master » créée par défaut) du projet à une « version en cours de développement » (n’importe quelle autre branche que « master »)

  1. Jusqu'ici vous avez travaillé sur une seule branche « master » : c’est la branche principale, celle qui en général contient le « vrai » code source de votre projet. Pour voir toutes vos branches
    git branch 
  2. Créez une branche « vegetarien » dans votre dépôt Git.
     git branch vegetarien 
  3. Vérifiez que vous êtes bien dans la branche Master par la commande
    git branch 
  4. Basculez dans la branche vegetarien
     git checkout vegetarien
  5. Vérifiez dans quelle branche vous êtes
  6. Ajoutez deux/trois plats végétariens au menu et commitez au fur et à mesure les modifications.
  7. Fermer votre fichier.
  8. Observez l’historique des modifications du dépôt, que remarquez-vous ?
  9. Revenez à la carte principale (branche « master ») et observez l’historique des modifications, que remarquez-vous ?
  10. Ajoutez un plat non-végétarien au menu de la branche master. Commitez la modification.
  11. Le cuisinier et le directeur du restaurant sont satisfaits de vos propositions de plat et souhaitent maintenant les ajouter au menu principal. Fusionnez (« merge ») la branche « vegetarien » à la branche « master ».
    git merge vegetarien 

    Que se passe-t-il ? Ouvrez le fichier Menu.txt et vérifiez que la fusion s'est bien passée.

  12. Créez une branche « japonais »
     git checkout -b japonais 
  13. Ajoutez des plats japonais en commitant au fur et à mesure les modifications et retirer des plats de viande.
  14. Revenez sur la branche « master » et fusionnez la branche « japonais ». Regardez le contenu du fichier Menu.txt et l’historique de modifications du dépôt. Y a-t-il eu un conflit ? Pourquoi ?
  15. Si vous avez un conflit, résolvez le conflit de manière à ajouter tous les plats situés entre les balises de conflit (««< et »»>). Commitez le changement (et donc la fusion) en tapant « git commit –a »
  16. Modifiez le contenu de la branche japonais.
  17. Supprimer la branche japonais. Que se passe-t-il?
     git branch -d japonais 
    1. Supprimez les branches « vegetarien » et « japonais ».

Synchronisation de votre répertoire

Hormis la première étape, vous avez expérimenté Git pour gérer localement vos versions. Nous allons maintenant nous intéresser au développement collaboratif de fichier sources.

  1. Visualisez les références distantes
     git remote 
  2. Visualisez les URL associées aux références distantes
    git remote -v 
  3. Chaque personne du groupe participe :
    1. (Personne A)
      1. Créez un fichier index.html reprenant le code ci-dessous :
        <html>
        <head>
        <title>Demo</demo>
        </head>
        <body>
        </body>
        </html>
      2. Ajoutez le fichier au dépôt git et commitez le fichier. Envoyez ensuite le commit vers le dépôt distant :
         git push origin master
    2. (Tous sauf A)
      1. Visualiser l'état du dépôt distant
         git remote show origin 
      2. Synchroniser votre dépôt git avec la commande
         git pull 
  4. (Un développeur autre que A)
    1. Modifiez le fichier index.html afin d’ajouter du texte entre les balises body.
    2. Commitez les modifications et envoyez-les vers le dépôt distant.
  5. (TOUS) Synchroniser votre dépôt git avec la commande git pull.
  6. (Personne A)
    1. Modifiez le titre de la page Web et
    2. Commitez/envoyez les modifications.
  7. (Personne B) (SANS SYNCHRONISER LE DEPOT)
    1. Modifiez le titre de la page Web
    2. Commitez/envoyez les modifications. Que se passe-t-il ? Remédiez au conflit.

Tags

Git donne la possibilité d’étiqueter un certain état dans l’historique comme important grâce à un « tag ». Ces tags sont couramment utilisés pour marquer des états de publication (e.g. v1.0, v1.1, …). Deux types de tags sont disponibles :

  • Les tags légers : un pointeur sur un commit spécifique
  • Les tags annotés : stockés sous forme d’objets, ils contiennent une somme de contrôle, le nom et l’email du créateur, la date de création, un message et éventuellement une signature GPG.

Dans le cadre de cette matière, nous utiliserons que des tags légers. Pour plus d’informations sur le mécanisme de tags annotés, voir les ressources.

  1. Reprenez votre fichier « Menu.txt » et apportez-y des modifications. La nouvelle version obtenue correspondra à la carte qui sera publiée au guide Michelin 2017. Pour marquer cette importance, nous allons associer le tag « michelin » au prochain commit : Créez une étiquette ‘michelin17’
     git tag michelin17
  2. Listez les étiquettes disponibles
     git tag 

Attention ! Les tags ne sont pas poussés automatiquement sur un serveur distant. Il faut demander explicitement à pousser les étiquettes après les avoir créées localement (cf. cheat sheet) ou utiliser l’option –-tags

III. Git au travers d'un outil dédié sourceTree

Utilisation de sourceTree

  1. download
  2. installer le .exe
  3. Il vous faut un compte Bitbucket ou Atlassian mais vous pouvez vous connecter avec un compte google par exemple.
  4. Désélectionner Mercurial nous ne l'utiliserons pas.
  5. Clef SSH, vous pouvez dire non.
  6. Pour vous connecter à gitlab : clone
    1. récupérer l'adresse de votre dépôt git :
    2. la destination est celle sur votre machine, vous y retrouverez vos sources.
  7. Initialiser votre dépôt en git-flow (Flux Git en haut à droite)

- Noter que vous pouvez aussi utiliser les “repository” de projets (bouton add) lorsque vous avez plusieurs projets à gérer en parallèle (par exemple, plusieurs projets github, différents dépôts pour l'IUT, différents dépôts pour vos projets personnels ect.)

IV. Utilisation de gitflow

Attention cette partie s'appuie sur SourceTree qui doit donc être installé sur votre machine !

Gérer son projet en suivant l'approche gitflow

Cheat-Sheet

C'est juste un résumé !

antisèche sur les lignes de commandes

Création/Synchronisation

  • Création d’un repo Git local
 $ git init myRepo 
Initialized empty Git repository in /private/tmp/myRepo/.git/
  • Cloner un repo Git distant
  $git clone <URL du repo Git à cloner> 
  • Ajouter une cible (ie. Un serveur distant) – cette opération est implicite si le repo a été initialisé avec git init
$ git remote add origin <URL du repo Git>
  • Pousser les commits locaux de la branche master sur un serveur distant (origin)
 $ git push master origin
  • Se synchroniser avec un serveur distant (ie. Récupérer les commits distants)
 $ git pull

Commiter des modifications

  • Afficher l’état courant du repo local
 $ git status 
  • Versionner un nouveau fichier
 $ git add <Fichier à ajouter> 
  • Commiter un état courant avec un message de commit
 $ git commit -m "Premier commit"
[master (root-commit) b992814] Premier commit
 1 file changed, 5 insertions(+)
 create mode 100644 Menu.txt
  • Afficher l’historique du repo
 $ git log
 

Utiliser des branches

  1. Créer une branche

$ git checkout -b vegetarien Switched to a new branch 'vegetarien'

  1. Basculer sur une branche existante

$ git checkout master Switched to branch 'master'

  1. Supprimer une branche existante

$ git branch –d japonais

  1. Lister les branches existantes

$ git branch

master

* vegetarien

  1. Merger (i.e. fusionner) une branche dans la branche courante

$ git merge vegetarien

Les tags

  • Créer un tag léger
 $ git tag michelin17 
  • Lister les tags
 $ git tag
michelin17
  • Pousser un tag sur un serveur distant
 $ git push origin michelin17
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/ulrich06/TD_Git.git
  - [new tag]         michelin17 -> michelin17
  • Pousser tous les tags sur un serveur distant
 git push origin --tags 

Maintenant Je peux aborder la gestion de projet

Ressources

1)
Un éditeur s'ouvre qui dépend de votre configuration. S'il ne vous convient pas, vous pouvez le configurer par exemple
 git config --global core.editor emacs 
2)
Au lieu d'un git add suivi d'un git commit vous pouvez préférer
 git commit -a -m "ajout des aubergines"
2018_2019/s3/methodo/td/git.1535904933.txt.gz · Last modified: 2018/09/02 18:15 by blay