Git
& Tools
à Médiamétrie
Choix d'un outil
pour Médiamétrie
Historique Médiamétrie
- DSI Levallois : Svn (+ CVS ?)
- DSI Sophia : Hg + CVS
- DDSM : CVS + SVN
Pourquoi GIT ?
1. sondage de compétences auprès des développeurs
2. étude comparative des outils auprès des tech leads
( sur base de facteurs pondérés)
3. Git est devenu le nouveau standard : choix sûr et up-to-date

Pourquoi Gitlab ?
Outil OpenSource proche de GitHub
s'est détaché de ses concurrents en terme :
-
de fonctionnalités
- code review
- charts / branch tree
- wall, feed RSS
- d'interface graphique
- d'outils administration
- de communauté
Bon challenger des outils SaaS du marché...
... mais gratuit, OpenSource et en constante évolution !
Git dans
l'Histoire
Outils de gestion de version
Git, c'est quoi ?
Outil OpenSource de gestion
de versions de sources
Crée par Linus Torvalds en 2005
pour gérer le versionning du Kernel Linux
Distribué sous license GNU GPL V2
Git est un DVCS : 'D' pour "Décentralisé"
Philosophie git
-
Rapidité
-
Complètement distribué
-
Minimaliste
-
Support des développements
non linéaires (basé sur des branches)
-
Repense la manière de stocker les informations
-
Basé sur des sommes de contrôle SHA-1
Migrer sous git ?
depuis Mercurial : concepts similaires
depuis CVS / SVN : nouveau concept de repository local

- quelques nouveaux concepts
- nouvelle manière de travailler
- un peu de vocabulaire à apprivoiser
- 1 repository = 1 projet
Passage aux dvcs
VCS vs DVCS
{DISTRIBUTED} VERSION CONTROL SYSTEM
VCS
copie locale des fichiers du dépôt distant

DVCS
copie locale (complète) du dépôt distant

On ne récupère plus "fichier par fichier" !
Distribué

chaque développeur a une copie complète du repository de source, c'est à dire toutes les révisions, branches, tags etc...
Possibilité de récupérer un repo de développeur en cas de crash ou corruption du serveur central.
Travail offline
Tout l'historique sur le poste local :
- possibilité de travailler en déconnecté
- pratique si coupure réseau par exemple...
-
parcours de l'historique immédiat
- switch de branche immédiat également
Rapide car tout est en local...
et encore plus rapide grâce au stockage des fichiers....
Modèles de stockage des fichiers
VCS - Deltas

DVCS - fichiers complets

Petit & rapide
|
|
|
|
Structure des commits


Avantages & inconvénients
VCS
+ Facilité d’administration
- Point unique de panne (SPOF)
- Perte de travail en cas de corruption
- Suppression/écrasement de fichiers par inadvertance
DVCS
+ Possibilité de travailler sans connexion
+ Restauration facilitée
+ Possibilité de collaborer sans passer par le dépôt central
...quelques désavantages malgré tout...
Les concepts
de base
Vocabulaire & concepts
SVN
checkoutcommit
update
working copy
SVN server
GIT
clone / checkoutadd / commit / push
fetch / merge / rebase
local repository/branch
remote repository/branch


staging area

- Git possède une Staging Area ou Index. C'est un état intermédiaire dans lequel les commits peuvent être formattés, retravaillés, revus avant de les finaliser.Vocabulaire : Add to Index / Staged files
-
Le commit effectue bien un commit, mais sur le repository local.
- Le Push poussera les commits du repository local vers le distant. Sans envoyer les éventuelles modifications du working directory ou de la staging area.
Etats d'un fichier dans git


Validated

Indexed
(Staged)
Untracked
Modified
Unmodified
Reset
Git reset depuis un commit nommé

-
mixed est possible sur un fichier donné
- sinon utiliser Checkout pour un reset --hard par fichier
PUSH / PULL
PULL
Rapatrie les modifications de la branche destination sur la branche courante. Peut donner lieu à une fusion avec la branche courante (merge ou rebase selon stratégie choisie)
PUSH
Envoie les modifications (de la branche courante) sur la branche de distante.
Fetch
Se met au courant de l'état de la branche distante
Démo
git init
git status
git add/stage file
git rm file
git commit [-a -m --amend]
git blame file
git reset
git checkout
git push
git pull
Branches &
concepts avancés
Branches locales
Git permet et encourage à avoir de multiples branches locales, chacune indépendante les unes des autres.
Switching de contexte sans effort - créez une branche pour tester des nouvelles idées, faites quelques commits, puis reprenez votre travail depuis l'endroit ou vous aviez branché.
Experimentation jetables - créez une branche pour expérimenter quelques travaux... et si vous réalisez que ça ne fonctionnera pas, et supprimez simplement cette branche !
Workflow par Features - créez une branche pour chaque nouvelle feature sur laquelle vous travaillez, vous pourrez ensuite passer facilement des unes aux autres, puis les supprimer après les avoir mergées sur le tronc commun .
Branches distantes
Git permet de pousser les branches locales
sur le serveur central distant.
Workflow par Features - poussez votre branche locale sur le repository distant pour contribuer à plusieurs sur une même feature.
Projets collaboratif - créez votre branche, faites vos développement, puis poussez la branche sur le repository distant. Puis soumettez l'a branche à validation par la personne responsable du projet collaboratif : idéal dans le monde OpenSource, mais aussi pour les librairies communes!
Hot-Fix simplifié - repartez du tag de la version en prod pour en faire une branche, fixez le bug (éventuellement récupérer le fix déjà développé et poussé sur le tronc commun à l'aide du Cherry Picking), puis poussez/buildez/releasez cette nouvelle branche.
Jenkins de la nouvelle UL simplifie le processus de build & release depuis une branche
Stashing & Cherry Picking
Stash
Mettre de côté toutes les modifications de la copie de travail
et de l’index, pour pouvoir les réappliquer plus tard
et de l’index, pour pouvoir les réappliquer plus tard
Utile par exemple pour mettre en pause le dev d'une feature
et le déplacer sur une branche dédiée
et le déplacer sur une branche dédiée
Cherry Picking
Permet de sélectionner un commit quelconque
et de l’appliquer sur la branche actuelle
et de l’appliquer sur la branche actuelle
Utile par exemple pour réaliser un HotFix et l'appliquer sur une branche de Production (par exemple dans le cadre du workflow Git-Flow)
Merge
Merge automatique quand pas de conflits
(Il est même possible de merger depuis l'interface GitLab)
Plusieurs stratégies et outils pour résoudre les conflits
Merge VS Rebase
En mode build par branches, Jenkins de la nouvelle UL peut même automatiquement merger
Stratégie merge
Stratégie par défaut.
Merge de la branche distante dans la branche locale (master).
Si conflits au merge :
1. tous les fichiers sans conflits sont ajoutés à l'index
2. résolution des fichiers en conflits puis ajout à l'index
3. crée un commit de merge



Stratégie Rebase
Merge de la branche distante dans la branche locale (master).
Si n'est pas la stratégie de Pull par défaut, nécessite un Fetch.
Les commit du master sont supprimés et réappliqués à la suite des commits de la branche distante.
L'historique est linéaire, similaire à l'utilisation d'un VCS.



Démo
Travailler
avec Git
Intégration Jenkins
-
les Webhooks
par exemple pour builder avec le meilleur timing
possible (lancement du build au commit)
-
Gestion des notifications
Jenkins ne notifie que la personne en cause lors
d'un pb de compilation par exemple.
Le spam c'est fini!
Et bien d'autres intégrations avec Jenkins
et d'autres outils...
Workflows
Git permet la mise en place de Workflow
de développement spécifiques pour
améliorer l'organisation du travail en équipe
de développement spécifiques pour
améliorer l'organisation du travail en équipe
Pour l'instant nous utilisons le Centralized Workflow, qui se rapproche de l'utilisation en mode VCS.
Le plus connu des workflow est Git-Flow, qui peut être un objectif pour les équipes qui veulent tenter l'expérience.
D'autres Workflows : Integration-Manager, Dictator and Lieutenants, Feature Branch, Forking, Unbreakable Build...
bémols
Oui Git c'est compliqué !
...mais c'est bien outillé, rapide, puissant...
une fois qu'on maîtrise les bases !
une fois qu'on maîtrise les bases !
(et a-t'on besoin de ces fonctionnalités ? ...)
Feature Branches ou Workflows avancés
Travailler en feature branches est concrètement complexe à mettre en place avec un build continu et du multi-projets (Jenkins, artefacts SNAPSHOT branchés, etc...)
Idem pour tentative de mise en place du Build Incassable...
OUTILS
outillage
-
Git Bash (ligne de commande)
simple et efficace, maîtrise parfaite des optionsutile en cas de "coup dur"
Plugin EGit pour Eclipse
fournit la grande majorité des fonctionnalités,
se substitue volontiers au Git Bash
autre outils :
Github, TortoiseGit, GitEye, SourceTree, git-cola...
(cf: http://git-scm.com/downloads/guis)
GITLAB
sur la Nouvelle UL : http://scm.ul.mediametrie.fr/

GITLAB
Exploration de fichiers, création, modification, suppression...
...et commit.

GITLAB
Graphique de branches, de commits, "blame", statistiques, etc...

Guides M&O
Récupérer le Kepler configuré Médiamétrie
Comment configurer Eclipse et déposer sa clé SSH ?
Démo GitLab
Bibliographie
Git Book "ProGit"
Blog Octo
Réécrire l'histoire avec Git, pratique avancée :
Merge ou Rebase ?
Pratiques avancées de Git Bash
Workflows
Atelier git
Inscriptions à la sortie de cette session
Levallois : 12 places par session
jeudi 10 juillet 16h-18h
vendredi 11 juillet 13h30-15h30
Levallois : 12 places par session
jeudi 10 juillet 16h-18h
vendredi 11 juillet 13h30-15h30
Inscription sur le tableau blanc
à la fin de la session...
Q&R ?
Git & Tools
By jeremee
Git & Tools
- 1,208