Module Intgration Introduction Git Un peu dhistoire Noyau

































- Slides: 33
Module Intégration Introduction à Git
Un peu d’histoire • Noyau linux : plusieurs millions de lignes de code § § Au début, modification par patch et par mail Puis, utilisation de Bit. Keeper au début gratuit puis changement de licence • Début avril 2005, Linux Torvalds écrit Git • 7 avril 2005, publication de la 1ère version
Git • Système de gestion de version distribué et décentralisé • Conserve l’historique des modifications en local • Permet le travail collaborative • Fiable et rapide • Facile l’expérimentation
Système centralisé : SVN/CVS Client • Un seul dépôt de version Client Repository (SVN, CVS) Client • Pas de possibilité de travailler sans réseau Ø En local, le développeur ne possède que les sources de la branche sur laquelle il travaille Ø Sans l’historique ! • Difficulté à expérimenter Ø Toutes branches doit être connu par le repository Client • Risque de perte de données en cas de plantage du repository Ø Seul le repository connait l’intégralité de l’historique
Système décentralisé : GIT • Chaque client possède l’intégralité du repository • Contient l’ensemble de l’historique des modifications Client • Possibilité de travailler sans être connecté Client • Favorise l’expérimentation § Possibilité de créer des branches en local sans les mettre à disposition § Possibilité de cloner un repository sans demander l’autorisation § Possibilité de déterminer arbitrairement un serveur référent. On parle de « bare repositories»
Git : Protocole • Ne repose pas sur un protocole en particulier. • Possibilité d’utiliser un de ces protocoles § § § https: // git : // ssh : // file: // …
Git : 3 arborescences Working Tree / Espace de travail git checkout Zone de travail courante. C’est dans cette zone où sont visibles tous les fichiers (modifiés, non trackées. . ) git add Staging Area / Zone de transit Espace contenant les fichiers dont le trackage vient de commencer. ou des modifications viennent d’être réalisées. git reset Local Repository / dépôt local Tout ce qui est dans le repertoire. git. Il contient l’ensemble des commits. Le repertoire «. git » ne doit jamais être supprimé. git commit
Etape par étape
Installation • Installer un client git § § § Tortoise. Git Source. Tree Et d’autres
Configuration git config --global param « Valeur » • Configuration du nom et de l’adresse mail $ git config --global user. name "Nicolas Rousseau " $ git config --global user. email "nicolas. rousseau 1@gmail. com"
Initialisation ou clonage git init • Initialisation d’un nouveau dépôt git $ git init mon-projet git clone url_depot • Clonage d’un dépôt existant $ git clone https: //github. com/nicolas 59/epsi-jee-demo. git
Ajouter et commiter un fichier git add mon_fichier git add src/ git add. • Ajout d’un fichier, d’un repertoire ou de tous les éléments crées et/ou modifiés dans le « staging » git commit –m « commentaire » • Permet de déplacer les éléments du staging vers le depôt $ echo "Introduction à Git" > README $ git add README $ git commit -m "Intro"
Mettre à disposition les modifications git remote • Réalisation d’un lien avec un dépôt distant git remote add origin https: //github. com/nicolas 59/depot-git. git push • Envoi des modifications vers le dépôt distant git push --set-upstream origin develop
Mettre à disposition les modifications
Se mettre à jour git fetch • Réalise une mise à jour par rapport au dépôt distant sans modifier les fichiers de l’espace de travail $ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https: //github. com/nicolas 59/depot-git 2058 bf 7. . a 26994 a master -> origin/master
Se mettre à jour git merge • Merger les sources de l’espace de travail apres le fetch $ git merge Updating 2058 bf 7. . 5 fa 2 fad Fast-forward README | 2 ++ 1 file changed, 2 insertions(+)
Se mettre à jour git pull = git fetch + $ git pull remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https: //github. com/nicolas 59/depot-git 5 fa 2 fad. . e 94 ec 89 master -> origin/master Updating 5 fa 2 fad. . e 94 ec 89 Fast-forward README | 1 + git merge
Créer un nouvelle branche git checkout -b nom_branche • permet de créer un nouvelle branche en local et de positionner sur cette nouvelle branche $ git checkout -b feature/commandes_git Switched to a new branch 'feature/commandes_git' git branch nom_branche • Permet de créer une branche sans se positionner sur celle-ci
Se positionner sur une branche existante git checkout nom_branche • Permet de positionner sur une autre branche git checkout feature/commandes_git Switched to branch 'feature/commandes_git' Your branch is up to date with 'origin/feature/commandes_git'.
Mettre à disposition une branche git push origin ma_branche • permet de pousser la nouvelle branche $ git push origin feature/commandes_git Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 304 bytes | 304. 00 Ki. B/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. remote: Create a pull request for 'feature/commandes_git' on Git. Hub by visiting: remote: https: //github. com/nicolas 59/depot-git/pull/new/feature/commandes_git remote: To https: //github. com/nicolas 59/depot-git. git * [new branch] feature/commandes_git -> feature/commandes_git
Merger une branche git merge branche_a_merger • Merge la branche spécifiée sur la branche courante $ git merge feature/commandes_git Updating 267 f 229. . 5 eba 6 f 9 Fast-forward • README Envoie| 3 des ++- modifications vers le 1 file changed, 2 insertions(+), 1 deletion(-) dépôt distant
Obtenir l’historique git log -n 5 • permet de récupérer les 5 dernières modification git log --graph --abbrev-commit --decorate --pretty=oneline • permet d’afficher l’historique graphiquement
Voir les différences git diff mon_fichier • Permet de voir les différences réalisées sur le fichier entre l’espace de travail et le dépôt/ou le staging
Connaitre l’état des modifications git status • Permet de connaitre les modifications en cours
Changer de branche sans intégrer les modifications git stash • Permet de mettre de côté des éléments et de retourner à un « working directory » propre git stash pop • Permet de restaurer des éléments sauvegardés par la commande précédente et de les remettre dans le « working directory » propre
Modifier le commentaire git commit --amend • Permet de modifier le commentaire du dernier commit
Les méthodes d’utilisation de Git
Git Flow • Modèle de développement mise au point par Vincent Driessen • Repose sur l’utilisation de 2 branches principales : § § master develop • Et de branches dérivées : § § § feature / bugfix hotfix release
Github Flow • Repose sur l’utilisation d’une seule branche principale « master » • Tout ce qui est sur « master » est déployable • Chaque nouvelle fonctionnalité est créée à partir d’une nouvelle branche issues de « master » • Apres relecture et validation par les pairs, la fonctionnalité est mergée sur la branche
Conseils
Bonnes pratiques • Ne jamais travailler directement sur la master § § mais toujours à partir d’une branche la branche sera mergée sur la master via un pull request / merge request • Une branche doit : § § ne pas vivre trop longtemps intégrer qu’une seul fonctionnalité • Ne pas ajouter des commentaires inutiles pour ne pas encombrer l’historique § § § Réaliser un « squash » lors du merge d’une branche afin de ne conserver que les informations utiles Modifier des « amend » pour ajouter des modifications Réécrire l’historique (Pour les pros)
Bonnes pratiques • Lorsqu’une branche a une durée de vie longue § Faire régulièrement des « rebase » ou des « merge » de la branche de développement • Ajouter des Tests Unitaires § § afin de faciliter les merges de garantir une stabilité de l’application • N’hésiter pas à tester des solutions en local sur le projet sans pousser les branches vers le dépôt distant
Liens utiles • https: //www. git-tower. com/blog/git-cheat-sheet • https: //github. com/training-kit/downloads/fr/github-git-cheat -sheet/ • https: //learngitbranching. js. org • https: //tutorialzine. com/2016/06/learn-git-in-30 -minutes