Contribuer à un projet hébergé sur GitHub

Date: 15/11/2011 | Catégories: Developpement,Open-source,Planet-libre | Tags: ,,

Le gestionnaire de version GIT semble prendre de plus en plus de place dans le petit monde des développeurs. Les qualités des services comme Gitorious ou GitHub y sont sûrement pour quelques choses. Il y a quelques temps, j'ai donc décidé de laisser tomber mon bon vieux serveur SVN et de migrer mes projets sur le service en ligne GitHub. Comme tous ces projets sont sous licences libres, l'hébergement sur GitHub est gratuit.

Quelques lecteurs voulant contribuer à la vie des ces développements m'ont demandé comment contribuer à un projet hébergé sous GitHub. Ce billet est là pour répondre à ces demandes !

Les deux premières étapes sont à suivre seulement la première fois que vous voulez contribuer à un projet. Les étapes suivantes sont par contre à faire à chaque contribution dans un nouveau projet.

1) Créer un utilisateur sous GitHub

C'est la première étape, s'enregistrer comme utilisateur sur le site GitHub. Il faut pour cela se rendre sur la page suivante puis renseigner le formulaire. A noter que ce compte vous servira à la fois pour contribuer à des projets existants mais également à héberger des projets sous licences libres (dans la limite de 300 Mo).

2) Enregistrer sa clé SSH

Afin de sécuriser la connexion vers serveurs GitHub, une clé SSH doit être générée et échangée entre votre PC et GitHub. On va donc commencer par générer une nouvelle clé SSH sur notre PC:

Note: remplacer utilisateur@domaine.com par l'adresse mail que vous avez utilisé lors de la création de l'utilisateur sur GitHub.

La commande suivante:

devrait afficher la clé fraîchement créée:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCn3BD+Kq9qdVQrRNf9CIWGHWHrYpygPbOjidGA/34TWcKKSY0QgUVl3CYBkBDMyTMRNoDnMcF5O4bpwUDx2uXPAlrjQnUAk/WvPdQ+Clcnv+H5jgaj0i6Gfw/WSRDopmGpey7B29UGifgYW3/1MacH7tb+6Q03phUPedcBd4LNN+iBAUSfSvesYXNWW9//Wl7xi3OT2qbLOBRCGF9nlvv1AXEAbCF8h3l4Bu9w0BeVpmSIekLqNZVasEvM/4MWj+E7ayVajCQC2tm4+mt7+0kVHW35PUDlRaW2mv9muuy2mvqtJ4aW+zoPd3sWADUGBLLASWhuqY2Gmh3LIN+2gq2l  utilisateur@domaine.com

Il faut ensuite se rendre sur votre interface d'administration de GitHub puis ajouter une nouvelle clé SSH associée à votre PC (Add another public key):

Puis copier/coller la clé SSH (le contenu du fichier  ~/.ssh/id_rsa.pub) dans le formulaire:

Pour tester que la clé a bien été prise en compte, il suffit de lancer les commandes suivantes depuis votre PC:

Si la clé fonctionne correctement, il reste a configurer les informations suivantes:

3) "Forker" le projet sur lequel vous voulez contribuer

Imaginons que vous vouliez contribuer sur le projet Nagisk (mon plugin Asterisk pour Nagios), il faut dans un premier temps se rendre sur sa page GitHub puis cliquer sur le bouton .

Cette première action va dupliquer ("fork") dans votre espace  GitHub, le contenu du projet Nagisk. Ce nouveau projet aura sa propre vie par rapport au projet initial.

Il faut ensuite récupérer le nouveau projet en local sur votre PC:

Note: Remplacer utilisateur par votre login GitHub.

Note 2: La dernière ligne va configurer le Git "source" (celui à partir duquel vous avez forké le projet) comme remote.

Il faut ensuite créer une branche dans laquelle vous aller faire vos développements:

Note: Choisissez une NOMDELABRANCHE qui colle à votre modification. Par exemple, si c'est une modification de bug, un nom du type PATCH_XXX avec XXX qui est égal au numéro de ticket (issue).

Il ne vous reste plus qu'à coder...

Une fois le phase de codage terminer, il faut mettre à jour la nouvelle version de votre projet avec les commandes suivantes:

Si il y a des conflits après la dernière commande, il faut les corriger puis poursuivre le rebase:

Votre projet "forker" est maintenant à jour. Reste à proposer votre modification au projet source.

4) Formuler votre demande de contribution

Pour cela il suffit d'appuyer  sur le bouton  (pour plus d'informations, voir ici la page officielle de l'action Pull Request)

La demande de modification va alors être proposée au responsable du projet source qui pourra, s'il le souhaite, l'inclure dans sa prochaine version.

En cadeau bonux, une feuille A4 contenant une liste non-exhaustive des commandes Git.

Sources: Blog Lorna Jane

  • Bonjour,

    Pourquoi avoir choisi Github plutôt que Gitorious ?
    Github, je crois, utilise un logiciel propriétaire pour sa plateforme d’hébergement contrairement à Gitorious.

    • Ou encore bitbucket pour avoir le plaisir d’utiliser Mercurial

      • Stockman

        bitbucket pour avoir surtout des repos privés gratuitement

    • La communauté est beaucoup plus grande sur github que sur gitorious.

  • Pingback: Contribuer à un projet hébergé sur GitHub | Oshimin | Scoop.it()

  • Très pratique pour ceux qui n’aiment pas l’aide en anglais sur GitHub.

    Il manque peut être la commande pour mettre à jour son fork quand on a pas contribué depuis un certain temps et repartir sur la même base (si nécéssaire).

    Un truc du genre (pour reprendre l’exemple):
    git remote add nicolargo git://github.com/nicolargo/nagisk.git
    git pull nicolargo master
    git push origin

    Merci du billet en tout cas 😉

    • J’avais noté autre chose sur mon site ensuite je ne connais pas assez git pour dire quelle est la bonne technique :

      git fetch nicolargo
      git merge nicolargo/master
      git push

      • Pareil pour moi, je ne connais pas assez git pour savoir la différence exacte entre les deux (qui semblent fonctionner) 😉

        • Hello,
          Git pull = git fetch + git merge.
          (En gros ça créer une branch temporaire qui est mergé tout de suite, généralement en fast-forward si pas conflits)
          Git fetch = git fetch 🙂
          Pour justement récupérer un remote distant et le comparer avec le local mais sans merger.

          Merci pour le billet.

  • Le PDF suivant devrait vous intéresser, une liste des commandes Git sur une feuille A4: http://bit.ly/sdIiiv

  • ManuxFR

    Pour ceux qui travaille sous Windows –> http://help.github.com/win-set-up-git/

  • Bonjour,
    Lorsque l’on modifie plusieurs fichiers, à quel moment leur affecte t’on un commentaire individuel ?
    Il faut modifier un fichier, ajouter le commentaire et mettre à jour (push) puis faire de même pour les autres fichiers ?
    Nicolas.

  • Il n’est pas bon de travailleur directement sur master, quand on veut faire une pull request par la suite.

    Le process décrit sur ce lien : http://symfony.com/doc/master/contributing/code/patches.html#initial-setup est a conseiller….

    Sinon, pour ceux qui ne connaissent pas bien git, la meilleur reference est pro-git. et il existe une version en FR, et gratuite…

    • Effectivement… Je viens de corriger le billet pour que les modifications se fassent sur une branche spécifique.

      Merci pour le lien 🙂