Introduction
GIT: un outils de gestion de version (acronyme VCS en anglais) distribué.
Fonctions:
- Fournit des informations sur l’évolution d’un ou d’un ensemble de fichiers
- Quand le(s) fichier(s) ont été modifiés
- Qu’est ce qui a été modifié
- Par qui
- Permet à plusieurs personnes de faire évoluer un ensemble de fichiers
Différence entre système de gestion de version distribué et centralisé
- Dans un système centralisé les utilisateurs n’ont en local qu’une version des fichiers du projet (working copy).
Dans un système distribué les utilisateur ont en local une copie du repository complet (toutes le versions des fichiers)
Prérequis:
Création d’un compte sur GITHUB:
- Se connecter sur https://github.com/
- Remplir les 3 champs et cliquer sur « Sign up for GitHub »
- Cliquer sur « Continue »
- Cliquer sur « Skip this step »
- Vous deviez maintenant avoir reçu un email de confirmation d’adresse email
- Cliquer sur « Verify email address »
- La page web ci-dessous devrait s’ouvrir dans votre navigateur
Ajout du nouvel utilisateur créé dans l’organisation « Les Fabriqueurs » (Pierre ou Grégoire)
- Connexion sur la page https://github.com/les-fabriqueurs
- Cliquer sur « Invite someone »
- Sélectionner l’utilisateur a ajouter
- Cliquer sur « send invitation »
- L’email ci-dessous est automatiquement envoyé a l’utilisateur
- Cliquer sur le lien https://github.com/orgs/les-fabriqueurs/invitation?via_email=1
- Cliquer sur « Join Les fabriqueurs »
Installation du client Git pour Windows
- Aller sur https://git-for-windows.github.io/ et cliquer sur Download
Ou exécuter directement le fichier disponible dans le Dropbox fabriqueurs sous « Dropbox\Fabriqueurs\Distrib\GIT »
(garder les options par défaut)
Premiers pas:
Présentation de l’implémentation d’un workflow simple de développement pour une petite équipe
Un workflow centralisé:
- Utilisation d’un repository central servant de point d’entré unique pour tous les changements du projet
- Ce workflow ne nécessite pas l’utilisation de branches autres que la branche principale (« master »)
1. Initialisation d’un repository central
- Connexion sur la page de l’organisation « Les Fabriqueurs » : https://github.com/les-fabriqueurs
- Cliquer sur « New repository »
- Saisir un nom de repository puis cliquer sur « Create repository »
2. Chaque utilisateur va maintenant cloner ce repository
- Créer un répertoire pour stocker cette copie locale du repository
- Lancer le programme « Git Gui » et cliquer sur « Clone Existing Repository »
- Chaque utilisateur a donc une copie locale du repository central (toutes les versions) et avec la dernière version locale identique à la dernière version centrale
3. François effectue des modifications locales de certains fichiers du projet
- Francois modifie/ajoute des fichiers dans son arborescence locale
- Dans UI « Git Gui » Francois clique sur « rescan » afin d’obtenir dans le cadre « Unstaged Changes » la liste des fichiers modifiés
- Francois clique sur « Stage Changed » afin d’inclure ces modifications dans le prochain « commit »
- François clique sur « Commit » afin de créer localement une nouvelle version du projet prenant en compte ses modifications
- François clique sur « Push » afin de remonter cette nouvelle version sur le repository central (cela ouvre une autre fenêtre dans laquelle il faut de nouveau cliquer sur « Push »)
- Le repository central et celui de Francois sont maintenant de nouveau synchronisés
4. Liliane effectue aussi des modifications locales de certains fichiers du projet
- Avant de faire ses modifications, le repository de Liliane est d’ans l’état ci-dessous.
- Après le commit des modification de Liliane (mais avant le push) nous obtenons
- Liliane va tenter de remonter ses modifications sur le repository central (Push)
Logiquement, Git Gui renvoie le message d’erreur suivant:
Pushing to https://github.com/les-fabriqueurs/Training-session-1
To https://github.com/les-fabriqueurs/Training-session-1
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://github.com/les-fabriqueurs/Training-session-1‘
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
- Liliane doit d’abord récupérer les modifications remontées ds le repository de référence (central repository) par Francois, les integrer a ses modifications avant de tenter un nouveau ‘push’.
- Liliane récupère les modifications du repository central:
Cette opération récupère localement les versions du repository central. Nous avons maitenant 2 branches qu’il va falloir fusionner…
- Liliane fusionne les 2 versions
Comme dans cet exemple Liliane et Francois ont modifié le même fichier, la fusion automatique de fonctionne pas et la demande de merge retourne l’erreur:
Auto-merging Documentation/Doc1.txt
CONFLICT (content): Merge conflict in Documentation/Doc1.txt
Automatic merge failed; fix conflicts and then commit the result.
warning: old-style ‘git merge <msg> HEAD <commit>’ is deprecated.
Il va falloir faire la fusion des 2 versions de fichier manuellement
- Edition du fichier Documentation/Doc1.txt
- Fusion manuelle des modifications (le fichier contient le contenu des 2 versions en mode « diff »)
- Commit
- Liliane peut maintenant retenter un push sur le repository central
SUCCESS ! 🙂