Le système de versioning git

2,234 views

Published on

un simple guide pour débuter avec le système de gestion de version git

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,234
On SlideShare
0
From Embeds
0
Number of Embeds
171
Actions
Shares
0
Downloads
44
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Le système de versioning git

  1. 1. Préface Ce manuel constitue un simple guide pour débuter avec le système de gestion de version git. Ce guide n’est pas une référence complète que vous utilisez en cas de besoin. Ce document vous guidera dans votre apprentissage et vous donnera les premiers pas pour commencer avec les systèmes de gestion de version. La documentation complète du système git est disponible en anglais (http://git-scm.com/book/) et en français (http://git-scm.com/book/fr). Vous pouvez aussi essayer git en ligne en suivant le lien http://try.github.com/ -Nassim BAHRI-
  2. 2. Le système de versioning git Introduction Lorsque vous travailler sur un projet en équipe, le problème majeur rencontré consiste en la modification d’un fichier par plusieurs utilisateurs ainsi que la gestion des conflits. Dans ce cas un système de versioning sera un outil indispensable. Le système de gestion de version est un logiciel qui enregistre l’évolution d’un ou plusieurs fichiers au cours du temps, en gardant la trace de toutes les modifications effectuées, de manière à ce qu’on puisse rappeler une version antérieure d’un fichier à tout moment. Parmi les fonctionnalités basiques d’un tel système, nous pouvons citer :  Conserver un historique de toutes les modifications,  Possibilité de travailler à plusieurs (grâce aux fonctions de verrous et de gestion des conflits),  Permettre la modification parallèle des fichiers (le système de branches). Différents modèles Brièvement, les systèmes de gestion de version proposent trois modèles de travail que vous pouvez choisir l’un d’entre eux selon vos besoins.Nous commençons à détaillé ces différents modèles. 1. Le modèle local C’et laméthode la plus courante et quise matérialise dans la copie des fichiers de travail dans un autre répertoire sur le même ordinateur. Cette méthode est la plus simple et adapté lorsqu’un seul utilisateur travaille sur le projet. Ce modèle peut être résumé par laFigure 1. Figure 1 : Les systèmes de gestion de version locaux
  3. 3. 2. Le modèle centralisé Lorsque vous travailler en groupe, vous allez vous retrouver avec un problème courent; les développeurs ont besoin de collaborer sur des stations différentes. Il est donc impossible d’utiliser le modèle local. La solution sera donc de centraliser les fichiers sur un ordinateur qui sera accessible par tous les membres de l’équipe. Et c’est ça le principe d’un tel modèle qui met en place un serveur central contenant tous les fichiers sous gestion de version, et des clients qui peuvent extraire les fichiers de ce dépôt. Ce modèle peut être résumé par la Figure 2. Figure 2 : Les systèmes de gestion de version centralisés Cependant, ce modèle présente un risque majeur que la panne du serveur centralisé présente. En effet, si le serveur tombe en panne tous les collaborateurs seront bloqués et ne peuvent pas enregistrer les modifications issues de leurs travails. Ils risquent aussi de tous perdre si le disque dur du serveur se corrompt. 3. Le modèle distribué Suite aux problèmes que présente le modèle centralisé, les systèmes de gestion de version distribués entent en jeu. L’apport de ce nouveau modèle est que les clients n’extraient pas seulement la dernière version du fichier mais ils dupliquent tous le dépôt, c'est-à-dire stocker toutes les versions du fichier dans un dépôt local (présenté dans le paragraphe 1). Ainsi si le serveur tombe en panne, il peut être restauré en se serviront du dépôt d’un des clients. La Figure 3 résume ce dernier modèle. Choix du système de versioning Sur le marché, plusieurs logiciels permettent la gestion de version. Nous présentons dans le Tableau 1 quelques logiciels libres. Gestion locale GNU RCS (1982) Gestion centralisée CVS (1990), CVSNT(1992), SVN(2000)
  4. 4. Gestion distribuée SVK(2003), Git(2005), Fossil(2007) Tableau 1 : Exemples des logiciels de gestion de version D’après la comparaison entre les différents modèles de gestion de version que nous avons faite dans les paragraphes précédents, nous pouvons relever que les systèmes de gestion distribuée semblent être les meilleurs. Parmi les logiciels de gestion distribués, « git » est le mieux adaptés vu les caractéristiques qu’il présente :  Vitesse,  Conception simple,  Support pour le développement non linéaire (possibilité de travailler à plusieurs),  Complétement distribué,  Disponible sur plusieurs plateformes (Windows, Linux, Mac os),  Plusieurs clients existants (GitHub, Gitbox, sourceTree,...). Figure 3 : Les systèmes de gestion de version distribués Bien démarrer avec git : Installation Avant de commencer à utiliser n’importe quel logiciel, il faut dans un premier temps l’installer. Nous verrons dans cette section comment installer le système de gestion de version git sous Windows. Pour les autres plateformes notamment Linux et Mac os vous pouvez suivre les instructions décrite dans le lien suivanthttp://git-scm.com/book/fr/D%C3%A9marrage-rapide-Installation-de-Git. Pour installer git, rien de complexe. Rendez-vous sur la page de téléchargement via ce lien http://git- scm.com/downloads et télécharger la version adéquate avec votre système d’exploitation.
  5. 5. Figure 4 : Télécharger git Une fois le téléchargement est terminé, lancez le fichier exécutable. Figure 5 : Lancement de l'installation Figure 6 : Licence GPL et conditions d’utilisation Figure 7 : Chemin d'installation Choisissez par la suite l’emplacement d’installation de git sur votre ordinateur.
  6. 6. Une fois vous avez mentionné l’emplacement de l’installation, il vous est demandé de choisir les composants à installer avec git. Vous devez donc cocher les deux cases Git Bach Here et Git GUI Here. Figure 8 : Choisir les composants à installer Choisissez le dossier où vous voulez créer les raccourcis et ajouter par la suite git au PATH de votre ordinateur. Figure 9 : dossier contenant les raccourcis Figure 10 : Ajouter git au PATH
  7. 7. Figure 11 : Choisissez le mode de traitement Figure 12 : git en cours d'installation Figure 13 : Installation terminée Passons maintenant aux choses sérieuses : la configuration et l’installation de git. Par défaut git nous propose deux modes d’utilisation ;un mode graphique et un mode en utilisant les lignes de commande. Nous intéresserons dans les sections suivantes à l’utilisation de git avec les lignes de commande puisqu’il est plus complexe que le mode graphique. Il est à noter que nous pouvons utiliser plusieurs client git qui nous permet la simplification de quelque tâches. Parmi les clients gratuits :  GitHub (http://windows.github.com/) / (http://mac.github.com/)  Git Extension (https://code.google.com/p/gitextensions/)  SourceTree (http://www.sourcetreeapp.com/)  GitEye (http://www.collab.net/giteyeapp)
  8. 8. Bien démarrer avec git : Configuration Lors de la première utilisation du gestionnaire de version git vous devez configurer certains paramètres notamment le nom de l’utilisateur et l’adresse email qui seront utiles pour identifier les utilisateurs qui ont validés des modifications par la suite.  Modifier le nom de l’utilisateur Git config --global user.name ‘nom utilisateur’  Modifier l’adresse email Git config --global user.email ‘email@exemple.com’  Afficher la liste des informations de configuration Git config --list  Obtenir l’aide Git help [commande] Bien démarrer avec git : Les bases de git Dans cette section nous illustrons les différents fonctionnalités de git avec un exemple réel.  Créer un projet git Dans un premier lieu, vous commencer à créer votre projet. Lancer ‘Git bash’ que vous avez installé avec git et positionner vous dans le répertoire de votre projet. Cd /c/wamp/www/monProjet Supposons que nous sommes en train de développer une application web, donc notre projet sera sous le répertoire www de notre serveur. Dans une seconde étape il faut initialiser git Git init Cette commande crée les fichiers contenant les informations nécessaires pour le contrôle du projet.  Vérifier l’état des fichiers On suppose que nous ayons créé le fichier index.php qui affiche le fameux message ‘Hello World’ et nous voulons vérifier l’état des fichiers de notre projet, il suffit de taper la commande Git status Il faut savoir que le cycle de vie des états d’un fichier est le suivant :
  9. 9.  Untracked : le fichier n’est pas sous le contrôle du gestionnaire de version,  Unmodified : le fichier n’est pas modifié,  Modified : le fichier a été modifié,  Staged : mis en scène, en attente de validation (commit). Le résultat de notre commande Figure 14 : Résultat de la commande git init Nous pouvons constater que le fichier index.php est dans un état untracked. Pour ajouter ce fichier sous le contrôle de git, nous devons tapez la commande Git add index.php Git status Figure 15 : Résultat de la commande git status Nous pouvons constater que notre fichier a passé vers un état staged.
  10. 10.  Valider les modifications A ce stade nous pouvons valider nos modifications Git commit –m ‘un message’ Nous pouvons aussi consulter la liste de nos commit en tapant la commande Git log [-p] [-2] -p : permet d’afficher la différence entre chaque validation -2 : le nombre maximal à afficher  Différence entre les fichiers Des fois, nous avons besoins de voir la différence entre les fichiers avant de valider les modifications. La commande qui nous servi pour cette opération est : Git diff Nous pouvons aussi voir la différence du dernier commit Git diff HEAD Ou bien voir les modifications mises en scène (en attende d’un commit) Git diff --staged  Eliminer la phase d’indexation avant le commit Avant de valider les modifications, il faut ajouter les fichiers modifiés dans la zone d’index en utilisant la commande Git add nom_fichier Nous pouvons donc éliminer cette étape en passant directement par la commande suivante Git commit –a –m ‘mon message’ En effet, si nous avons des nouveaux fichiers il faut impérativement passer par la commande Git add nom_fichier  Suppression /déplacement d’un fichier Parfois nous avons besoin de supprimer ou de déplacer un fichier vers un autre répertoire. Dans ce cas il faut indiquer à git que vous avez fait une modification dans la structure de votre projet. Les commande qui nous servi dans ce cas sont : Git rm nom_fichier (pour la suppression d’un fichier)
  11. 11. Git mv fichier_origine cible (pour le déplacement d’un fichier)  Modifier le dernier commit Supposons que lors de notre dernière validation nous avons oublié de mettre un fichier sous contrôle de version, donc il ne sera pas pris en compte lors de ce commit. Au lieu de créer un autre commit, nous pouvons modifier le dernier commit en ajoutant ce fichier. La commande qui permet de modifier une commit est la suivante : Git commit –amend Exemple : Touch liste.php Git commit –m ‘mon dernier commit’ # Dans ce cas le fichier liste.php n’est pas pris en compte Git add liste.php Git commit --amend La dernière ligne permet de modifier le commit en ajoutant le fichier liste.php  Désindexer un fichier Parfois nous avons besoin de garder un ou plusieurs fichiers en privé Figure 16 : Arborescente du projet Nous avons créé les deux répertoires css et images ainsi que les fichiers script.js et private.txt. Nous voulons mettre tous les fichiers de ce projet sous contrôle de version sauf le fichier private.php. Nous pouvons donc faire : Git add * Git reset HEAD private.php  Réinitialiser un fichier Le but de l’utilisation d’un gestionnaire de version est de récupérer une version antérieure d’un fichier modifié. La commande qui nous permet d’effectuer cette opération est : Git checkout --nom_fichier
  12. 12.  Afficher les étiquettes (tags) L’étiquetage est une technique utilisé pour marquer un état de publication. Par exemple marquer le dernier commit comme étant la version 1.0 de ce projet. Nous pouvons afficher la liste des tags en se serviront de la commande : Git tag  Créer une étiquette Pour la création d’une étiquette rien de complexe : Git tag –a 1.0 –m ‘un message’ 1.0 : c’est le nom de l’étiquette Figure 17 : Créer une étiquette  Afficher les informations d’une étiquette Pour afficher les informations d’une étiquette, la commande est : Git show nom_etiquette Figure 18 : Afficher les étiquettes
  13. 13.  Créer une branche Les branches est l’un des éléments les plus importants lors de l’utilisation d’un gestionnaire de version. Pour être simple, nous pouvons définir une branche comme un espace de travail séparé et indépendant. Donc nous pouvons créer des branches pour chaque membre de l’équipe si on travaille en groupe ou bien une branche pour le développement et une autre pour la production… La commande qui permet la création d’une branche est : Git branch nom_branche  Basculer vers une autre branche Pour passer d’une branche à une autre nous pouvons utiliser la commande Git checkout nom_branche Our bien la commande Git checkout –b nom_branche Cette commande permet de créer une branche et basculer automatiquement vers cette dernière.  Fusionner deux branches Une fois nous avons terminé notre travail et nous voulons fusionner nos deux branches, nous utilisons la commande : Git merge nom_branche Dans ce cas le contenu de la branche nom_branche sera fusionné avec le contenu de la branche actuelle (dans ce cas master). Exemple d’utilisation : Nous allons créer dans un premier lieu la branche « dev » qui sera consacré pour notre travail de développement Git branch dev Par la suite nous basculons vers cette branche Git checkout dev Figure 19 : Basculer vers la branche dev
  14. 14. Créons maintenant le fichier produit.php Touch produit.php Git add produit.php Figure 20 : Créer le fichier produit.php Maintenant, il nous reste qu’à valider les modifications Git commit –m ‘commit avec le fichier produit.php’ Figure 21 : Valider les modifications Pour afficher les différentes branches, on utilise la commande Git branch Figure 22 : Lister les branches La branche avec un Astérix est celle en cours. Nous revenons maintenant vers la branche master Git checkout master
  15. 15. Figure 23 : Retour vers la branche master Affichons le journal de modification Git log Figure 24 : Afficher le journal de modification Nous pouvons constater que le dernier commit de la branche « dev » n’est pas pris en compte dans cette branche et si on affiche la liste des fichiers de ce projet avec la commande « ls » nous pouvons voir que le fichier produit.php n’a pas été ajouter. Ls Figure 25 : Lister le contenu du répertoire de travail Maintenant nous pouvons fusionner le contenu des deux branches « dev » et « master » dans « master » Git merge dev
  16. 16. Figure 26 : Fusion des branches Faisons un Git log Figure 27 : Afficher l'historique des modifications  Supprimer une branche Pour la suppression d’une branche, la commande est : Git branche –d nom_branche Il est à noter que si une branche contient des modifications validées et qui n’ont pas été fusionné avec d’autres branches, il est impossible de supprimer cette dernière. Nous aurons le message : Figure 28 : Supprimer une branche
  17. 17.  Afficher les dernières validations de chaque branche Pour afficher le dernier commit de chaque branche, nous utilisons la commande Git branch –v  Les branches fusionnées Pour afficher les branches fusionnées avec celle en cours, nous utilisons Git branche --merge Dans le cas contraire, nous utilisons Git branch --no-merge Notions avancées : travailler sur un dépôt distant Dans la première partie de ce document, nous avons invoqué le besoin des développeurs à collaborer sur des stations différentes. Et nous avons présenté le modèle répondant à ce type de problème. Tout au long de cette partie nous supposons que notre serveur est configuré pour la prise en compte du système git. Nous verrons dans la prochaine partie l’installation et la configuration de git sur un serveur.  Afficher les serveurs distants Lorsque nous travaillons avec des dépôts distants, nous avons toujours un ensemble de serveur (url des serveurs) enregistrés pour notre répertoire de travail. La commande qui nous permet d’afficher la liste des serveurs enregistrés est : Git remote Cette commande permet d’afficher le nom court su serveur (en d’autre terme un alias du serveur) Pour afficher les informations complètes sur le serveur notamment son nom et son url nous utilisons Git remote –v  Cloner un dépôt distant La commande qui nous permet de cloner un dépôt distant sur notre machine est la suivante Git clone url_serveur/nom_repertoire.git Cette commande permet d’ajouter un nouveau serveur à notre projet avec l’adresse url_serveur et l’alias origin.
  18. 18.  Ajouter un nouveau dépôt distant La première étape à faire lorsque nous souhaitons travailler avec un dépôt distant consiste à ajouter l’adresse de ce dernier à notre projet. Bien sûr cette étape est négligée si nous avons fait un clone. Git remote add alias URL Exemple: Git add origin https://github.com/NassimBahri/Filgrane.git  Récupérer depuis des dépôts distants Pour obtenir les données des dépôts distants, il suffit de lancer la commande Git fetch alias Exemple : Git fetch origin Cette commande s'adresse au dépôt distant et récupère toutes les données de ce projet que vous ne possédez pas déjà.  Pousser le travail vers un dépôt distant Une fois vous êtes satisfait avec votre copie locale, il est temps de la pousser vers le dépôt distant afin de la partager avec les autres membres de l’équipe. La commande qui nous permet de pousser notre travail est la suivante : Git push alias branche Nous pouvons aussi lancer cette commande en ajoutant un autre paramètre Git push –u alias branche -u permet de se souvenir de l’alias du serveur ainsi que la branche. La prochaine fois que nous voulons pousser notre travail, il suffit de taper Git push  Inspecter un dépôt distant La commande permettant d’afficher les informations sur un dépôt distant est Git remote show alias  Renommer / supprimer un dépôt distant Pour changer l’alias d’un dépôt distant rien de complexe, il suffit de lancer la commande Git remote rename old_alias new_alias
  19. 19. De même pour la suppression d’un dépôt distant Git remote rm alias  Fusionner le travail Pour fusionner le contenu de la branche distante avec la mienne, nous lançons la commande Git pull alias branche_distante Exemple Git pull origin master Cette commande permet de fusionner le contenu de la branche distante master avec le contenu de la branche actuelle du dépôt local. Notions avancés : Installation de git sur un serveur L’installation de git sur un serveur se diffère d’un hébergeur à un autre. Nous verrons dans cette partie comment installer git sur les serveurs d’un hébergeur Français ; alwaysdata (https://www.alwaysdata.com/). 1. Créer un compte et activer le ssh Accédons à la page d’inscription et créons notre compte d’hébergement. Une fois notre compte a bien été créé, nous accédons à notre espace d’administration via cette url :https://admin.alwaysdata.com/. Figure 29 : Formulaire de connexion Introduisons notre adresse email et notre mot de passe pour accéder à notre panel d’administration. Par la suite, nous devons activer notre compte ssh.
  20. 20. Figure 30 : Menu d'administration Figure 31 : Liste des comptes ssh Figure 32 : Activer le compte ssh Maintenant il est temps de configurer notre serveur pour la prise en compte du système de versioning git. 2. Se connecter à notre compte Dans un premier lieu connectons-nous à notre serveur en mode ssh. Ouvrons alors ‘git bash’ et tapons la commande suivante Ssh conf@ssh.alwaysdata.com Expliquons cette commande : ssh : indique le mode de connexion
  21. 21. Conf : le login de notre compte d’hébergement ssh.alwaysdata.com : l’adresse de notre serveur Figure 33 : Connexion en mode ssh L’arborescence de notre répertoire est la suivante : 3. Configuration de gitweb La seconde étape de notre processus consiste à configurer gitweb. Tout au long de notre travail nous considérons que nos dépôts git serons stockés dans le répertoire /home/conf/git Dans le dossier /home/conf/cgi-bin créons un lien sur le CGI de gitweb à l’aide de la commande : /home www cgi-bin admin user (conf) /home www cgi-bin admin git user (conf)
  22. 22. Cd cgi-bin ln -s /usr/lib/cgi-bin/gitweb.cgi Créons ensuite le dossier contenant les fichiers nécessaire pout gitweb cd ../www mkdir gitweb mkdir ../git cd gitweb cp /usr/share/gitweb/*. Créons par la suite le fichier ‘.htaccess’ dans le dossier /home/conf/www, contenant ceci DirectoryIndex /cgi-bin/gitweb.cgi RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}!-d RewriteRule ^.* /cgi-bin/gitweb.cgi/$0 [L,PT] Passons maintenant à la dernière étape, la configuration de gitweb. Dans le dossier /home/conf/cgi- bin, créons un fichier ‘gitweb_config.perl’ contenant le code suivant : # Path to git projects (<project>.git) #le chemin que nous avons choisi pour nos dépôts git $projectroot = "/home/conf/git"; # Directory to use for temp files $git_temp = "/tmp"; # Target of the home link on top of all pages #$home_link = $my_uri || "/"; # Html text to include at home page $home_text = "indextext.html"; # file with project list; by default, simply scan the projectroot dir. $projects_list = $projectroot;
  23. 23. # Stylesheet to use $stylesheet = "/gitweb/gitweb.css"; # Logo to use $logo = "/gitweb/git-logo.png"; # The 'favicon' $favicon = "/gitweb/git-favicon.png"; A ce stade la configuration de notre serveur est terminée. Accédons à gitweb en ligne en tapant http://conf.alwaysdata.net/gitweb/ Figure 34 : Gitweb 4. Créer un dépôt nu Cette étape consiste à exporter un dépôt existant dans un nouveau dépôt nu c’est-à-dire un dépôt qui ne contient pas de copie de répertoire de travail. Essayons avec un petit exemple :  Créons un dossier test en local Figure 35 : Dossier test en local  Accédons à ce dossier et lançons la commande git init
  24. 24. Figure 36 : Initialisation de git  Créons une copie vide du dossier test Cd .. Pour revenir vers le dossier parent Git clone --bare test test.git Ou bien Cp –Rf test/.git test.git Figure 37 : Création du dépôt nu 5. Copier le dépôt nu sur le serveur Avant de continuer, il faut rappeler que nos dépôts distant seront stockés dans le répertoire /home/conf/git. La copie du dossier nu sur le serveur est très simple, il suffit de lancer la commande Scp –r repertoire.git user@serveur:chemin
  25. 25. Continuos avec notre exemple et tapons la commande Scp –r test.git conf@ssh.alwaysdata.com:/home/conf/git Figure 38 : Copie du dépôt nu sur le serveur Nous pouvons maintenant accéder à gitweb pour voir la liste de nos dépôts. Figure 39 : Liste des dépôts À partir de maintenant, tous les autres utilisateurs disposant d'un accès SSH au serveur git peuvent cloner votre dépôt en lançant la commande : Git clone user@serveur:/chemin/repertoire.git Utilisation de GUI Finalement, nous devons rappeler que nous pouvons utiliser l’assistant graphique (GUI – Git User Interface) pour la gestion de nos dépôts git.
  26. 26. Il suffit de vous déplacer dans le répertoire de votre projet git et de faire un clic droit et choisir par la suite Git GUI Here Figure 40 : Accéder à Git GUI Vous tombez sur cette interface Figure 41 : Git GUI Conclusion Tout au long de ce guide nous avons présenté les différents modèles de travail proposés par les systèmes de gestion de version. Nous avons travaillé avec les lignes de commande git pour gérer nos dépôts locales et distants. Par la suite nous avons expérimenté l’installation de git sur un serveur en prenant comme exemple l’hébergeur alwaysdata. A la fin de ce guide nous devons rappeler que ce document constitue un résumé des fonctionnalités présenté sur la documentation de git.
  27. 27. Néographies http://wiki.alwaysdata.com/wiki/Se_connecter_en_SSH http://wiki.alwaysdata.com/wiki/Configurer_Gitweb http://git-scm.com/book/fr

×