TP Gestion de versions avec Git
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
TP Gestion de versions avec Git Matthieu Herrb http://homepages.laas.fr/matthieu/envol2010/tp-git/tp-git.pdf Envol 2010
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Introduction Système de gestion de version distribué par opposition à CVS ou subversion qui sont centralisés Développé par Linus Torvalds pour le noyau Linux Similaire à Monotone, Darcs, Mercurial, Bazaar, etc.
Interfaces de git Ligne de commande Diverses GUI pour git (gitk, qgit, giggles, etc.) Plugin Eclipse: EGit
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Concepts de base repository tout l’historique du projet, contenu dans le répertoire .git diff ou patch différences entre 2 versions d’un fichier commit (verbe) action d’enregistrer les version d’un ensemble de fichiers dans le repository commit (nom) le résultat d’une action de commit, représenté par un hash SHA-1. branche une lignée de développement. par défaut tout le développement se fait dans la branche master tag un identificateur symbolique pour un commit ou une branche
Concepts de base (2) Working tree L’arborscence de fichiers en cours d’édition Index un objet traquant les fichiers modifiés, ajoutés ou supprimés Blob données binaires utilisées pour stocker les fichiers, commits, et autres données
Configuration initiale Définir les valeurs par défaut pour les commits Nom d’utilisateur & adresse mail Éditeur de textes préféré % git config --global --add user.name "Matthieu Herrb" % git config --global --add user.email \ "" % git config --global --add core.editor "emacs -nw" % cat ~/.gitconfig [user] name = Matthieu Herrb email = [core] editor = emacs -nw
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Créer un repository git init crée un répository vide dans le répertoire courant % mkdir git-tutorial % cd git-tutorial % git init Initialized empty Git repository in /home/mh/git-tuturial/.git/ % ls -l .git total 24 -rw-r--r-- 1 mh mh 23 Oct 26 09:14 HEAD -rw-r--r-- 1 mh mh 111 Oct 26 09:14 config -rw-r--r-- 1 mh mh 58 Oct 26 09:14 description drwxr-xr-x 12 mh mh 408 Oct 26 09:14 hooks drwxr-xr-x 3 mh mh 102 Oct 26 09:14 info drwxr-xr-x 4 mh mh 136 Oct 26 09:14 objects drwxr-xr-x 4 mh mh 136 Oct 26 09:14 refs
Ajout de fichiers git add ajoute des fichiers nouveaux ou récemment modifiés à l’index % echo "Hello World" > file.txt % git add .
Consulter l’état Affichier la branche courante, et l’état de l’index % git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: file.txt #
Committer les modifications % git commit Created initial commit 0ba7bd8: Initial version 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file.txt % echo "Hello Matthieu" > file.txt % git commit -a Created commit 7fbf4cb: Modif 1 files changed, 1 insertions(+), 1 deletions(-) Ouvre l’éditeur de textes pour entrer un message de commit, puis enregistre les modifications dans le repository.
Regarder en arrière Plusieurs façons d’examiner l’historique des modifications % git log commit 7fbf4cb7c8977061fbfb609016f5414e833a3a1c Author: Matthieu Herrb Date: Tue Oct 28 12:29:33 2008 +0100 Modif commit 0ba7bd8b93ef9ddd8917814bde8cbdaaf9732559 Author: Matthieu Herrb Date: Tue Oct 28 12:28:38 2008 +0100 Initial version % git log --stat % git log -p
Examiner les modifications Affiche les modifications entre le working set et l’index, ou entre l’index et le répository. echo "Good bye" > file.txt % git diff diff --git a/file.txt b/file.txt index 6bd8f3c..c0ee9ab 100644 --- a/file.txt +++ b/file.txt @@ -1 +1 @@ -Hello Matthieu +Good bye % git add file.txt % git diff --cached
Marquer une version Créer un objet de type tag, contenant un nom et un commentaire. Ouvre l’éditeur de texte pour saisir le commentaire. % git tag -a git-tuto-1.0 % git tag -l git-tuto-1.0
Corriger les erreurs, revenir à une version saine Restaurer le working set à partir de la dernière version commitée, détruisant toutes les modifications locales: % git reset --hard Inverser un commit donné: % git revert 03bace Finished one revert. Created commit c333ab5: Revert "3rd version" 1 files changed, 1 insertions(+), 1 deletions(-)
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Changer de branche Créer une nouvelle branche: % git checkout -b newbranch Retourner à la branche master: % git checkout master
Lister les branches existantes % git branch * master newbranch
Fusionner les modifications d’une autre branche % git merge branch Fusionne les commits de la branche branch et commite le résultat. 2 types de fusion fast forward: pas de conflits, seulement des nouveaux commits à ajouter à la version courante. fusion normale: présence de modifications locales : utilise un algorithme de fusion à 3 voies.
Gestion des conflits Un conflit se produit lorsque les modifications à fusionner sont incompatibles avec les modifications locales de la branche cible. Les fichiers avec des conflits contiennent des marqueurs de conflit Ils ne sont pas automatiquement ajoutés à l’index Résoudre le conflict Ajouter les fichiers à l’index Committer le resultat
Outils pour aider à la fusion Git peut utiliser des outils tiers pour aider à résoudre les conflits: kdiff3, tkdiff, meld, xxdiff, opendiff,... % git config --global merge.tool meld % git mergetool
Selectionner des modifications individuelles Prendre un commit dans une autre branche (une correction de bug) et l’appliquer à la branche courante. % git cherry-pick SHA1_HASH
Rebase - rejouer les commits d’une branche Les fusions créent des commits fantômes sous forme de liens dans le graphe des versions. Lorsqu’une branche n’a que quelques commits locaux, rebase est préférable % git rebase master
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Copier un repository git clone repo repo: un URL du repository à copier. Peut être: un chemin vers un répertoire sur la même machine ssh://[user@]host/path - utilise GIT dans SSH git://host/path - accès anonyme avec le protocole GIT http://host/path - accès anonyme avec le protocole HTTP
exercice repository dinner: ssh://envol2010@trac.laas.fr/git/envol2010/dinner clonez le repository créez votre branche personnelle modifiez le code utilisez les fichiers de compilation du TP automake arrangez le style corrigez des défauts dans le code ... commitez vos modifs au fur et à mesure synchronizez avec le repository central visualisez les modifs faites par d’autres fusionnez les modifs de plusieurs personnes pour faire une meilleure version
Mise à jour depuis un répository % git pull récupère les branches distantes dans le repository local fusionne la branch distante par défaut dans la branche courante. et commite le résultat peut produire un conflit. Résoudre le conflit Committer le résultat
Branches distantes % git branch -r liste les branches distantes (origin/branch). Une branche distante peut être suivie (fusionnée dans les 2 sens) avec: % git checkout -t -b newbranch origing/newbranch
Utilisation de rebase avec les branches distantes fecth récupère les commits distants sans les fusionner % git fetch % git rebase origin/master Raccourci: % git fetch % git rebase origin/master
Envoyer des commits vers un repository % git push Transfère les commits locaux vers les branches distantes suivies. Génère une erreur si pas à jour (pull ou rebase d’abord). Il faut transférer les tags séparément: % git push --tags
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Identifier les auteurs % git blame -- file.txt Pour chaque ligne d’un fichier montre le dernier commit et son auteur.
Recherche par dissection d’un bug git bissect permet de rechercher dans l’historique des commits l’origine d’un bug. git bisect start git bisect bad la version courante est buguée git bisect good v2.6.33-rc2 dernière bonne version Git détermine le commit médian et l’extrait. Tester et exécuter selon le résultat: git bisect good git bisect bad À la fin reste le commit responsable du bug...
Créer une distribution avec git (Alternative à la fonction d’automake make dist) Committer toutes les modifications, y compris le nouveau nom de la version. Tagger le résultat Utiliser archive pour produire une archive qui sera la distribution source. % git tag -a foo-1.3 % git archive --prefix=foo-1.3/ foo-1.3 \ | gzip -c - > foo-1.3.tar.gz
Outils graphiques gitk git gui qgit giggle Web browsers: cgit, gitweb.
Intégration avec eclipse Installation: ajouter http://download.eclipse.org/egit/updates comme site de téléchargement (Preferences → Install/Updates) installer EGit et JGit (Help → Install new software) Eclipse peut alors gérer l’historique du projet avec git. Documentation: http://www.eclipse.org/egit/documentation/
Agenda 1 Introduction 2 Concepts de Git 3 Développeur isolé 4 Utilisation des branches 5 Travailler à plusieurs 6 Autres fonctionnalités 7 Appendix
Git pour utilisateurs de CVS CVS git checkout clone update pull commit commit -a + push add add remove rm diff diff log log
Vous pouvez aussi lire