×

Blog

Contribuer à un projet open source sur GitHub

Vous aimeriez contribuer à un projet open source sur une plateforme telle que GitHub? Mais vous ne savez pas comment vous y prendre? Voyons ensemble comment y parvenir via le fork et le pull request. Vous allez voir, ce n’est pas très compliqué 😉

Les droits d’accès sur GitHub

Pour comprendre le processus de contribution sur GitHub, il faut déjà bien saisir les différents droits d’accès que vous pouvez avoir sur les différents dépôts hébergés sur la plateforme.

droits dépôts github

Vous avez 3 principaux accès:

  1.  Les dépôts privés tiers: Vous n’avez aucun accès sur ces dépôts. Ce sont des dépôts privés qui appartiennent à d’autres personnes.
  2. Vos dépôts et dépôts d’équipes: Vous avez les accès en lecture et écriture. Cela correspond aux dépôts dont vous êtes le propriétaire ou pour lesquels vous faite partie de l’équipe.
  3. Autres dépôts publiques: Vous avez uniquement les accès en lecture. Cela signifie que vous pouvez voir le contenu du dépôt et le cloner. Mais vous ne pouvez pas pousser directement vos modifications. Ce sont ces dépôts qui nous intéresse ici.

Mais comment contribuer à un projet si nous n’avons pas les accès en écriture? Et bien via le fork et le pull request que nous allons détailler tout de suite.

Dupliquer un dépôt via le fork

Le principe du fork

Pour contribuer à un projet open source, il faut déjà réaliser un fork du dépôt sur lequel on souhaite faire notre contribution. Cela correspond au fait de dupliquer le dépôt sur GitHub directement sur notre compte. 
 
fork github

Cela permet alors d’avoir les accès en lecture et écriture sur la copie du dépôt. Vous pouvez donc modifier le code et le pousser sur GitHub. Mais attention, ce sera uniquement la copie du dépôt qui se trouve sur votre compte qui sera modifié. Nous verrons après comment partager nos modifications avec le propriétaire du dépôt source.

Attention: Pour réaliser vos modification, je vous recommande très fortement de créer une branche spécifique. Cela permet de bien cloisonner votre travail et vous permet d’éviter des conflits avec d’éventuelles modifications qui peuvent arriver sur les branches déjà utilisés par le propriétaire du dépôt source.

git switch -c MA_BRANCHE

 

Le fork sur GitHub

Réaliser un fork sur GitHub est un vrai jeu d’enfant. Rendez-vous simplement sur la page du dépôt pour lequel vous souhaitez apporter votre contribution, puis cliquez sur le bouton “fork” en haut à droite.

faire un fork sur github

Vous verrez alors que le chemin du dépôt forké, n’est pas le même que celui d’origine, il est préfixé par le nom de votre compte. Il ne vous reste plus qu’a cloner cette copie de dépôt sur votre PC pour y réaliser vos modifications.

git clone URL_DEPOT_FORKE

 

Encore une fois, réalisez les modifications dans une branche spécifique à votre contribution.

git switch -c MA_BRANCHE

 

Proposez votre contribution via le pull request

Le principe du pull request

Bien, vous avez poussé votre branche sur la copie du dépôt pour lequel vous souhaitez contribuer. Mais pour le moment, cette contribution n’est disponible que sur votre copie du dépôt. Pour faire en sorte de proposer vos évolutions au propriétaire du dépôt source, il faut utiliser une autre fonctionnalité de GitHub qui est le pull request. Cela permet de notifier le propriétaire que vous avez une proposition de contribution. Comme votre dépôt est publique, le propriétaire peut alors consulter ou même clone votre branche et ainsi relire et tester votre code.

Si votre contribution, lui convient, alors il peut directement l’intégrer dans son dépôt via un merge ou rebase + merge. Au contraire, si des choses ne vont pas dans votre code, il peut échanger avec vous via un fil de discutions et ainsi vous permettre d’améliorer votre code.

Le pull request sur Github

Comme pour le fork, il est très simple de réaliser un pull request.

faire un pull request sur github

Pour cela, vous pouvez soit vous rentre sur le dépôt source ou sur la copie que vous avez de ce dernier. Vous allez alors voir un bouton “compare & pull request” qui vous permet comme son nom l’indique, de comparer votre branche avec la branche cible du dépôt source. Mais aussi, si il y a des différences, envoyer une requête au propriétaire du dépôt pour qu’il intègre votre contribution.

comparer et envoyer le pull request

Vous pouvez alors expliquer au propriétaire ce qu’apporte vos modifications et si nécessaire, échanger avec lui sur le sujet de votre code.

Accepter ou refuser un pull request

Nous avons vue comment se passait le pul request pour le contributeur, passons maintenant du coté du propriétaire. Dans les dépôts sur GitHub, vous avez un onglet “pull request” qui vous permet de voir les propositions de contributions que vous avez reçus.

liste des pull requests

Vous pouvez alors sélectionner celui que vous voulez traiter. Cela ouvre alors le fil de discutions et vous permet de voir le contenu des modifications proposés.

Je rappelle également qu’il est possible de récupérer la branche du contributeur sur son PC pour la tester. Pour cela:

  1.  Ajouter un remote vers le dépôt du contributeur : git remote add contrib [url_dépôt]
  2. récupérer la branche: git pull contrib [nom_branche]

Quand vous avez fini d’échanger avec le contributeur et que vous êtes satisfait de ces modifications, vous pouvez directement dans le fil de discutions, intégrer sa branche.

merge un pull request

Vous avez alors 3 possibilités:

  1. Faire un simple merge
  2. Réaliser un squash + merge
  3. Passer par un rebase + merge

Mettre à jour le dépôt forké

Lorsque vous réalisez un fork sur un dépôt, vous en réalisez une copie à un instant T. Cela signifie que toutes modifications apportées sur le dépôt source après votre fork, ne seront pas présentes sur votre copie.

mise à jour dépôt forké

Pour remédier à cela, c’est simple:

  1. Sur votre PC, ajoutez un nouveau remote à votre dépôt cloné. Ce remote, doit être en plus du origin, et il doit pointer sur le dépôt source: git remote add source [url_dépôt]
  2. Réalisez un pull sur la branche a mettre à jour: git pull source [nom_branche]
  3. Faire un push sur origin, pour mettre à jour votre fork: git push origin [nom_branche]