Commencez déjà par noter que GitHub est un outil gratuit pour héberger du code open source, et propose également des plans payants pour les projets de code privés.
Pour utiliser GitHub, il suffit de créer un compte gratuitement sur le site https://github.com.
Le grand intérêt de GitHub est de faciliter la collaboration à une échelle planétaire sur les projets : n’importe qui va pouvoir récupérer des projets et y contribuer (sauf si le propriétaire du projet ne le permet pas bien entendu).
Sur GitHub, nous allons en effet notamment pouvoir cloner des projets (dépôts) publics, dupliquer (“fork”) des projets ou encore contribuer à des projets en proposant des modifications (“pull request”).
Contribuer à un projet avec GitHub ou le copier
Sur GitHub, nous allons pouvoir contribuer aux projets publics d’autres personnes ou créer nos propres dépôts publics afin que d’autres personnes contribuent à nos propres projets. Commençons déjà par nous familiariser avec l’aspect contributeur de GitHub.
GitHub est une gigantesque plateforme collaborative qui héberge des dépôts Git. Pour rechercher des dépôts auxquels contribuer ou pour rechercher des fonctionnalités intéressantes qu’on aimerait récupérer, on peut aller dans l’onglet “explore” ou chercher un dépôt en particulier grâce à la barre de recherche en haut du site.
Les étapes pour contribuer à un projet (le cycle de travail) vont toujours être les mêmes :
- On copie un projet sur notre espace GitHub ;
- On créer une branche thématique à partir de master ;
- On effectue nos modifications / améliorations au projet ;
- On pousse ensuite la branche locale vers le projet qu’on a copié sur GitHub et on ouvre une requête de tirage depuis GitHub ;
- Le propriétaire du projet choisit alors de refuser nos modifications ou de les fusionner dans le projet d’origine ;
- On met à jour notre version du projet en récupérant les dernière modifications à partir du projet d’origine.
Copier un dépôt : clone vs fork
Pour copier un dépôt (repository) GitHub sur nos machines, il suffit d’utiliser l’option “clone URL” de GitHub pour récupérer le lien du repo puis d’utiliser la commande git clone [URL]
dans notre console.
On peut également utiliser l’option “fork” de GitHub. Un fork est une copie d’un dépôt distant qui nous permet d’effectuer des modifications sans affecter le projet original.
La différence entre un fork et un clone est que lorsqu’on fork une connexion existe entre notre fork (notre copie) et le projet original. Cela permet notamment de pouvoir très simplement contribuer au projet original en utilisant des pull requests, c’est-à-dire en poussant nos modifications vers le dépôt distant afin qu’elles puissent être examinées par l’auteur du projet original.
Lorsqu’on clone un projet, on ne va pas pouvoir ensuite récupérer les changements à partir du projet d’origine ni contribuer à ce projet à moins que le propriétaire du projet d’origine ne nous accorde des droits spéciaux (privilèges).
Le fork est une fonctionnalité très utile puisqu’elle permet à n’importe quelle personne de pouvoir dupliquer un projet et de contribuer à ce projet tout en garantissant à l’auteur du projet l’intégrité du projet original car ce sera à lui de valider ou pas les différentes pull requests (requêtes de tirage) des contributeurs.
Créer une branche thématique à partir de la branche principale
Pour contribuer à un projet, on va donc très souvent le copier en le forkant. Cela crée une copie du projet dans notre espace GitHub. On va ensuite créer une branche thématique et effectuer nos modifications.
Pour cela, une fois sur la page du projet forké dans notre espace personnel Git, on va cliquer sur le bouton de liste “branch” et ajouter un nom pour créer une nouvelle branche.
Rappelez vous qu’on utilise les branches pour expérimenter et apporter des modifications sans polluer notre branche principale (master par défaut). Lorsqu’on crée une branche à partir de la branche master, on effectue une copie (un instantané ou snapshot) de master telle qu’elle était à ce moment-là. Si quelqu’un d’autre apporte des modifications à la branche principale pendant qu’on travaille sur notre branche, il faudra qu’on récupère ces mises à jour.
Note importante : On peut également bien évidemment cloner le projet localement (sur notre machine) afin de pouvoir travailler dessus hors connexion puis renvoyer ensuite les modifications vers notre projet forké. Dans cette partie, je vais cependant me concentrer sur ce qu’il est possible de faire depuis GitHub seulement.
Effectuer des modifications au projet
Pour modifier un fichier, on va cliquer sur le fichier en question puis sur l’icône en forme de crayon à droite. Cela ouvre un éditeur.
On peut alors modifier les fichiers puis commit nos modifications dès qu’on les juge satisfaisantes. Pour cela, il suffit de renseigner un message de commit et de cliquer sur le bouton “commit changes” en bas de la page.
Pousser nos modifications : pull request
Une fois qu’on a terminé nos modifications, on va pouvoir les proposer. Pour cela, on va ouvrir une requête de tirage ou “pull request”.
Pour effectuer un pull request, on clique sur l’onglet “pull requests” puis sur “compare & pull request” ou sur “new pull request”.
Effectuer une requête de tirage correspond à demander à quelqu’un d’examiner et d’extraire votre contribution et de la fusionner dans sa branche. Les demandes d’extraction montrent des différences de contenu des deux branches. Les modifications, ajouts et soustractions sont affichés en vert et en rouge.
Suite à un pull request, le propriétaire du projet examine notre contribution et une discussion peut s’engager si il souhaite qu’on effectue d’autres modifications.
Fusionner notre pull request
La dernière étape du processus de travail correspond à fusionner notre branche thématique dans notre branche principale afin de réincorporer les changements effectués et d’avoir une branche principale à jour.
Pour cela, on peut cliquer sur le bouton “merge request” suite à notre pull request.
Créer un dépôt GitHub
La deuxième face de GitHub correspond à la création de dépôt sur GitHub afin que des gens collaborent dessus. Pour créer un nouveau dépôt sur GitHub, il suffit de cliquer sur l’icône “+” située en haut à droite puis sur “new repository”. Une page s’ouvre vous permettant de créer un nouveau dépôt.
Note : vous pouvez également importer un dépôt en cliquant sur “import repository”.
Sur la page de création de dépôt, vous devez renseigner un nom et une description pour le dépôt. Vous avez également une option « Initialise with a README », qui vous permet de cloner votre dépôt sur votre machine. Cette option est à cocher uniquement dans le cas où vous n’avez pas encore créé le dépôt en question sur votre machine.
De GitHub à Git et inversement
GitHub permet de contribuer simplement à des projets ou de laisser les gens contribuer à ces propres projets.
La plupart des gens qui utilisent GitHub vont cependant souvent préférer travailler hors ligne (en local; sur leur machine) plutôt que de devoir être constamment connecté à GitHub et de devoir passer par cette plateforme pour effectuer toutes les opérations.
Pour travailler localement, il suffit de cloner un projet après l’avoir forké. On va ensuite pouvoir effectuer nos différentes modifications sur notre machine.
Pour synchroniser les modifications faites depuis notre machine avec notre dépôt distant (dépôt GitHub), il suffit de faire un git commit
depuis le dépôt local et de push (envoyer) les modifications sur le dépôt GitHub à l’aide de la commande git push [nom-distant] [nom-local]
. Taper git push origin master
par exemple revient à envoyer les modifications situées dans ma branche master vers origin.
Pour récupérer en local les dernières modifications du dépôt GitHub, on va utiliser la commande git pull [nom-distant] [nom-local]
.