COURS GITHUB Version 2 Qu’est-ce que Git ? Git est un logiciel de versioning créé en 2005 par Linus Torvalds, le créateur de Linux. Un logiciel de versioning, ou logiciel de gestion de version est un logiciel qui permet de conserver un historique des modifications effectuées sur un projet afin de pouvoir rapidement identifier les changements effectuées et de revenir à une ancienne version en cas de problème. Les logiciels de gestion de versions sont quasiment incontournables aujourd’hui car ils facilitent grandement la gestion de projets et car ils permettent de travailler en équipe de manière beaucoup plus efficace. Parmi les logiciels de gestion de versions, Git est le leader incontesté et il est donc indispensable pour tout développeur
de savoir utiliser Git. A quoi sert concrètement un système de gestion de version ? Imaginez que vous possédiez un site web. A chaque fois que vous
voulez modifier quelque chose sur le site ou tester une fonctionnalité, vous êtes obligé d’effectuer une sauvegarde du site avant l’implémentation
afin de pouvoir le restaurer si quelque chose se passe mal. Jusqu’ici, le procédé est contraignant car vous allez devoir effectuer une sauvegarde complète et restaurer la sauvegarde en cas de problème mais cela ne semble pas très complexe ni insurmontable. Imaginez maintenant que vous soyez 10 à travailler sur le même site web, en vous occupant chacun de développer des fonctionnalités différentes mais qui peuvent être liées entre elles. L’organisation du travail est ici beaucoup plus complexe puisqu’il va falloir s’assurer : Que les fonctionnalités sur lesquelles travaillent un développeur ne rentrent pas en conflit avec les fonctionnalités sur lesquelles travaillent des autres développeurs ; Que chaque développeur sache sur quoi travaillent les autres développeurs afin de travailler correctement ; que chaque développeur possède une version actualisée du site pour tester et implémenter ses fonctionnalités. Ici, l’idée la plus logique serait de mettre en place un serveur distant qui contiendrait l’historique des modifications faites par chaque développeur afin que chacun ait accès aux avancées des autres. Chaque développeur pourrait également copier l’intégralité du contenu du serveur pour travailler en local sur sa machine. On vient ainsi de créer un système de gestion de version décentralisé rudimentaire. Grosso-modo, les logiciels de versioning et Git en particulier vont nous permettre d’effectuer ces opérations mais de manière beaucoup plus robuste et avec de nombreuses fonctionnalités supplémentaires très utiles (possibilité de synchroniser son dossier local avec le serveur, connexion aux autres projets et mise à jour des différences automatisée, etc. Git permet de coordonner le travail entre plusieurs personnes en conservant un historique des changements effectués sur des fichiers. Git permet à différentes versions d’un même fichier de coexister. Les développeurs travaillant avec Git ont accès à l’historique des modifications pour l’intégralité du projet et peuvent ainsi savoir quels changements ont été fait par rapport à leur version des fichiers, qui a fait ces changements, etc. Les deux modèles des logiciels de gestion de version : modèle centralisé vs modèle décentralisé Les logiciels de gestion de version sont aujourd’hui tous construits sur l’un des deux modèles suivants : le modèle centralisé ou le modèle décentralisé encore appelé modèle distribué. Le principe de base d’un modèle centralisé est la centralisation du code source lié au projet : la source du code du projet est hébergé sur un serveur distant central et les différents utilisateurs doivent se connecter à ce serveur pour travailler sur ce code. Dans un modèle distribué, le principe de base est opposé : le code source du projet est toujours hébergé sur un serveur distant mais chaque utilisateur est invité à télécharger et à héberger l’intégralité du code source du projet sur sa propre machine. Le modèle distribué a été popularisé par Git et présente différents avantages notables par rapport au modèle centralisé : Simplicité / flexibilité du travail : Comme chaque utilisateur peut héberger le code du projet, on n’a plus besoin d’être constamment connecté à un serveur central et on peut donc travailler en ligne sur sa propre machine ; Sécurité : Comme chaque utilisateur possède le code complet d’un projet, on peut utiliser la copie du projet d’un utilisateur comme back-up en cas de corruption du serveur central. Qu’est-ce que GitHub ? Git est un logiciel de gestion de version. Git va nous permettre d’enregistrer les différentes modifications effectuées sur un projet et de pouvoir retourner à une version précédente du projet. Dans le langage des systèmes de gestion de version, la copie de l’intégralité des fichiers d’un projet et de leur version située sur le serveur central est appelé un dépôt. Git appelle également cela “repository” ou “repo” en abrégé. GitHub est un service en ligne qui permet d’héberger des dépôts ou repo Git. C’est le plus grand hébergeur de dépôts Git du monde. Une grande partie des dépôts hébergés sur GitHub sont publics, ce qui signifie que n’importe qui peut télécharger le code de ces dépôts et contribuer à leur développement en proposant de nouvelles fonctionnalités. Pour récapituler, et afin d’être bien clair sur ce point : Git est un logiciel de gestion de version tandis que GitHub est un service en ligne d’hébergement de dépôts Git qui fait office de serveur central pour ces dépôts. Nous verrons comment utiliser GitHub en détail dans ce cours après avoir appris à utiliser Git.
Dans cette leçon, nous allons commencer par définir ce qu’est une console et ce qu’est un langage en lignes de commande puisque ce sont les outils qu’on va utiliser pour travailler avec Git et allons installer et paramétrer le logiciel Git. Utiliser Git : ligne de commande, console et interface graphique On peut utiliser différents types d’interfaces pour installer et pour utiliser Git. Dans ce cours, nous allons utiliser la console et donc un langage en lignes de commande plutôt qu’une interface graphique. Nous faisons ce choix pour différentes raisons : Utiliser la ligne de commande est le seul moyen d’avoir accès à toutes les commandes Git ; Toutes les personnes vont avoir accès aux mêmes commandes avec la ligne de commande, ce qui signifie que tout le monde pourra suivre ce cours de la même façon Si vous savez comment utiliser la version en ligne de commande, vous saurez utiliser n’importe quelle autre interface graphique. Commençons donc par rapidement présenter la console. Une console est une interface qui nous permet d’envoyer des commandes, c’est-à-dire des ordres directement à notre système (notre ordinateur) afin qu’il les exécute. La console, c’est cet écran noir qui nous parait très intimidant au premier abord : Console terminal git Pour envoyer des commandes à notre système, nous utilisons un langage qui dépend du système utilisé. La plupart des commandes s’écrivent sur une ligne, d’où le terme de “langage en lignes de commande”. Au début de l’informatique, les opérations se faisaient toutes en ligne de commande. Ensuite, des interfaces graphiques pour utilisateurs (GUI) ont été développées afin de rendre l’informatique plus accessible à tous. L’interface graphique utilisateur correspond à tout ce que vous voyez lorsque vous regardez votre ordinateur (les dossiers et fichiers sous forme d’icônes, etc.) et aux opérations auxquelles vous avez accès (ouvrir un fichier, le supprimer, le renommer…). La particularité des interfaces graphique utilisateur par rapport à la console est qu’elles utilisent principalement la souris pour leopérations là où la console force les utilisateurs à n’utiliser que le clavier pour envoyer des commandes. Cependant, en arrière plan, ce sont les mêmes opérations qui se passent lorsqu’on utilise une GUI ou la console. L’interface graphique utilisateur n’est finalement là que pour apporter un niveau d’abstraction supplémentaire pour l’utilisateur par rapport au langage machine et pour faciliter l’utilisation des ordinateurs. La question est donc : pourquoi utiliser la console plutôt que notre interface graphique utilisateur ? Tout simplement car certaines opérations sont beaucoup plus simples à réaliser via la console. Pour l’utilisation de Git, je vous renvoie aux raisons mentionnées ci-dessus. On va donc pouvoir utiliser la console pour envoyer des ordres à notre système d’opération et pour effectuer différentes opérations courantes comme la création d’un dossier ou d’un fichier, sa suppression, le renommage etc. et également utiliser la console pour exécuter les commandes spécifiques de Git après l’avoir installé. Les commandes de Git vont une nouvelle fois être les mêmes pour tous les systèmes (Windows, Mac OS, etc.). Les commandes liées aux opérations sur le système comme la création d’un dossier vont elles pouvoir être différentes d’un système à l’autre. Pour ma part, j’utilise un Mac depuis des années et utilise donc des commandes UNIX tout comme Linux. Si vous utilisez Windows, je vous invite à installer un logiciel vous permettant d’avoir accès aux commandes UNIX ou à complètement changer de système d’opération si vous le pouvez. Pour ce cours, les différences de système ne devraient pas être gênantes car nous allons nous focaliser sur les commandes Git qui sont les mêmes pour tous, mais cela vous sera utile dans votre vie de développeur. Commençons par ouvrir la console ensemble. Si vous êtes sous Mac, vous allez utiliser l’application Terminal disponible dans Applications -> Utilitaires -> Terminal. Si vous êtes sous Windows, vous allez utiliser l’Invite de commande ou PowerShell selon la version que vous possédez. Console terminal git Arrivé ici, vous allez pouvoir taper toutes sortes de commandes pour demander à votre système d’effectuer des opérations. Notez que la plupart des commandes qu’on va taper vont être dépendantes de notre emplacement dans le système. Par exemple, pour ajouter un dossier sur notre bureau, il va déjà falloir naviguer jusqu’au bureau via notre console. A titre d’information, les commandes (UNIX) de base à connaitre sont les suivantes : La commande pwd affiche le nom et chemin du répertoire courant. Elle permet de savoir où on se situe sur notre machine ; La commande ls affiche la liste des fichiers et répertories dans un répertoire ; La commande cd permet de changer de répertoire, c’est-à-dire de se déplacer d’un répertoire à un autre ; La commande mkdir permet de créer un nouveau répertoire (ou “dossier”) ; La commande touch permet de créer un fichier ; La commande mv permet de renommer ou de déplacer des fichiers. Si vous désirez en savoir plus sur les commandes UNIX, je vous invite à lire mon cours sur le shell Bash. Voilà tout pour ce petit aparté sur la ligne de commande qui devrait vous permettre de comprendre beaucoup plus rapidement et plus facilement la suite de ce cours. Installation de Git Entrons dans le vif du sujet et passons immédiatement à l’installation du logiciel Git. La façon la plus simple d’installer Git est de télécharger la dernière version sur le site officiel http://git-scm.com/downloads, d’ouvrir le fichier téléchargé et de suivre les instructions à l’écran en laissant toutes les valeurs par défaut. Si vous êtes sous Windows, téléchargez plutôt la version de Git présente sur https://gitforwindows.org/. Cette version inclut un outil permettant d’émuler le comportement de Bash (le langage utilisé par Mac et Linux) et donc d’avoir accès aux mêmes commandes que moi. Note : il est possible que la version de Git installée ne soit pas exactement la même que moi. Cela n’a aucune incidence et vous pouvez continuer à suivre le cours