Utilisation du versionning
Le versionning ? Kézako ?
Comme son nom le laisse entendre ça sert à faire plusieurs versions d’un fichier ou d’un projet en général. EX : Un projet et en prod et on veut tester une évolution, donc on fera une version du projet avec l’évol développée. Cette version sera sur une autre branche.
Une branche ? tu m’a pris pour un jardinier ou quoi ??
Beh c’est un peu l’idée, prenons un pommier, son principe est tout bête : faire des pommes (ici des golden)
Il a un tronc qui soutient l’ensemble => c’est la branche master
Il a aussi des branches qui se ressemblent mais ne sont pas identiques => c’est ce qu’on appelle le workflow
Chaque branche a le même but => faire des pommes
Ok mais mon evol je la place où dans l’histoire ?
L’évol sera dans notre exemple une autre variété de pommes (des granny smith), pour ça je vais créer une branche pour cette evol tout bêtement appelé evol_granny_smith
Dans cette branche j’irai ajouter ma bouture pour qu’elle fasse les pommes que je souhaite.
Principe de fonctionnement
Le principe est simple il y a une branche master qui servira de base pour les autres branches.
La branche master sera et devra toujours être iso avec ce qui est en prod, ça nous servira de sauvegarde en cas de soucis.
Un projet en cours de développement sera fait sur la branche master, une fois le projet en prod il faut faire un workflow avec au minima une branche dev
La branche dev sera utilisée en quasi permanence par la suite et sera fusionnée sur la master une fois en prod et de nouveau utilisée.
Un peu de vocabulaire
- l’objet blob (pour binary large object désignant un ensemble de données brutes), qui représente le contenu d’un fichier
- l’objet tree (mot anglais signifiant arbre), qui décrit une arborescence de fichiers. Il est constitué d’une liste d’objets de type blobs et des informations qui leur sont associées, tel que le nom du fichier et les permissions. Il peut contenir récursivement d’autres trees pour représenter les sous-répertoires
- l’objet commit (résultat de l’opération du même nom signifiant « valider une transaction »), qui correspond à une arborescence de fichiers (tree) enrichie de métadonnées comme un message de description, le nom de l’auteur, etc. Il pointe également vers un ou plusieurs objets commit parents pour former un graphe d’historiques
- l’objet tag (étiquette) qui est une manière de nommer arbitrairement un commit spécifique pour l’identifier plus facilement. Il est en général utilisé pour marquer certains commits, par exemple par un numéro de version (qu’on se servira pour le composer)
Utilisation
Sur Bitbucket il faut tout d’abord créer un pojet dans lequel on ajoutera un dépôt (repository), c’est important de faire un projet sur Bitbucket par client ça permet de mieux les projets web et de les retrouver facilement. Pour rappel un client peut avoir plusieurs demande (site web, e-shop, appli mobile, …)
– Une fois le dépôt créé il faut le récupérer sur son ordi soit en ligne de commande ou depuis un logiciel comme SourceTree.
– Si c’est un site existant il faut copier l’intégralité des fichiers dans le répertoire que l’on vient de cloner et ensuite le pousser sur le dépôt distant généralement en message de commit ‘initial commit’.
– Si c’est un nouveau projet on peut directement commencer à bosser depuis ce dépôt.
– À chaque fin de tâche ou de fonctionnalité (idéalement) on pousse les fichiers sur lesquels on a travaillé sur le dépôt avec un message de commit assez explicite.
Utilisation du fichier .gitignore
Ce fichier sert pour ne pas versionner certains fichiers ou dossiers.
Mais on peut aussi ne pas versionner le contenu d’un dossier mais vouloir versionner un dossier spécifique qui se trouve dedans (le dossier plugins mais un plugins qui n’est plus maintenu) Exemple :
# ne versionne pas les dossiers node_modules /vendor .idea # Plugins web/app/plugins !web/app/plugins/mon_plugin_a_garder
Gérer les conflits
Il se peut que lorsqu’on travaille à plusieurs sur un projet il y ait des conflits (c-a-d qu’on a bosser sur le même fichier en même temps)
Malheureusement c’est le dernier qui poussera qui devra gérer les conflits.
Il faut prendre soin de comparer ce que le collègue a modifié et ce qu’on a modifié pour ne pas écraser le travail de l’autre.
Certain éditeur de code gèrent mieux que d’autres les conflits, sourcetree le fait mais il n’est pas adapté lorsqu’il y a beaucoup de fichiers en conflit, perso je préfère PhpStorm qui a une interface mieux pensée pour ça.
Quelques commandes
Les commandes permettent de gérér le flot de données et les niveaux d’enregistrement dans le système de contrôle de révision de Git, par exemple, le checkout et le pull permettent de récupérer les données; le commit de les envoyer.
Git dispose notamment des commandes suivantes :
git initcrée un nouveau dépôtgit cloneclone un dépôt distantgit addajoute de nouveaux objets blobs dans la base des objets pour chaque fichier modifié depuis le dernier commit. Les objets précédents restent inchangésgit commitintègre la somme de contrôle d’un objet tree et les sommes de contrôle des objets commits parents pour créer un nouvel objet commitgit branchliste les branchesgit mergefusionne une branche dans une autregit rebasedéplace les commits de la branche courante devant les nouveaux commits d’une autre branchegit logaffiche la liste des commits effectués sur une branchegit pushpublie les nouvelles révisions sur le remote. (La commande codend différents paramètres)git pullrécupère les dernières modifications distantes du projet (depuis le Remote) et les fusionne dans la branche courantegit stashstocke de côté un état non commité afin d’effectuer d’autres tâchesgit checkoutannule les modifications effectuées, déplacement sur une référence (branche, hash)git switchchangement de branchegit remotegestion des remotes