Skip to article frontmatterSkip to article content

c’est quoi ?

jusqu’ici on a vu le socle de git

mais on n’a encore rien dit sur github (ou gitlab ou bitbucket...) qui est un service qui va au delà du système git à proprement parler

pour ajouter une dimension sociale et offrir des possibilités de collaboration avec .. la terre entière !

les noms

les accès

le workflow usuel

Alice publie du code

dans un scénario typique:

  1. Alice commence à écrire un bout de code - appelons-le rhubarbe - sur son ordi
    tout au long du codage, elle le met dans un repo git
  2. lorsqu’elle est contente elle va “mettre cela sur github”
    c’est-à-dire créer un repo vide dans https://github.com/alice/rhubarbe
    et pousser son repo dedans
  3. son travail devient donc accessible à tout le monde, et Bob le remarque
  4. il télécharge alors le contenu du repo sur son ordi avec un git clone

d’autres gens s’en servent: les Issues

  1. les gens qui utilisent le logiciel ont à leur disposition (dans le repo d’Alice) un espace qui s’appelle Issues
  2. dans lequel ils peuvent remercier Alice, poser des questions, signaler des soucis
    et de manière générale discuter librement autour du projet
    c’est le premier outil de la dimension sociale de ces plateformes collaboratives
    ça se passerait dans https://github.com/alice/rhubarbe/issues

Bob modifie le code pour ses besoins

  1. à ce stade Bob a tout sur son ordi, il peut modifier ce qu’il veut...
  2. toujours en utilisant git bien sûr, il n’a pas besoin de l’avis ni de l’autorisation d’Alice pour créer des commits, c’est tout de même son ordi

Bob veut soumettre ses changements à Alice : le Fork

  1. là par contre ça se corse un peu
    il faut prendre en compte le fait que, si ça se trouve, Alice n’a jamais entendu parler de Bob et ignore même jusqu’à son existence !
    du coup, pour commencer, Bob ne fait pas partie des gens qui ont le droit de modifier le repo d’Alice
  2. pour contourner ça, et pour pouvoir a minima exposer son idée à Alice, Bob va se créer un fork
    un fork, c’est tout simplement, encore un clone du repo, mais cette fois dans l’espace de Bob,
    donc dans https://github.com/bob/rhubarbe
  3. et la différence c’est que cette fois, Bob a le droit d’écrire dans ce fork il peut donc pousser ses nouveaux commits dans ce fork repo

Bob veut soumettre ses changements à Alice : le PR

  1. mais ça n’est pas exactement suffisant, car à ce stade Alice n’a toujours aucune connaissance de l’existence de Bob, ni a fortiori de nouveaux commits
  2. pour se manifester, Bob va créer ce qu’on appelle un PR (pour Pull Request) qui se trouvent ici https://github.com/alice/rhubarbe/pulls
  3. ce PR est créé dans le repo d’Alice en indiquant
    ○ où se trouvent les changements proposés (typiquement en indiquant le fork de Bob, et accessoirement dans quelle branche)
    ○ et la branche dans le repo d’Alice où on propose de merger les nouveaux commits
  4. dans ce PR va se nouer une discussion entre les deux protagonistes Alice peut soit refuser complètement, soit accepter tel quel, ou bien le plus souvent demander quelques modifications
  5. pendant cette discussion Bob continue à écrire dans son repo, pour tenir compte des demandes d’Alice
  6. enfin, si/quand on arrive à un accord, Alice peut en un clic merger les changements de Bob dans son propre repo
  7. du coup les modifications de Bob profitent à tout le monde
    et Bob n’a plus besoin de s’embêter à gérer sa version custom de rhubarbe
    et là Bob est très content 🙂
  8. et Alice aussi 🙂
    parce que d’autres peuvent de cette manière la décharger de certains aspects du projet

quelques indices sur l’UI de github

créer un repo sur github: README or not README ?

commençons avec un conseil pratique; il y a un point qui gêne pas mal les débutants, au moment de se mettre sur github:
lorsque vous créez le repo par l’interface web de github, on vous demande à un moment:

voulez-vous créer un README ? voulez-vous créer une licence ? voulez-vous ajouter un .gitignore ?

en réalité, cette question devrait plutôt être entendue comme

voulez-vous créer un repo complètement vide (auquel cas vous choisissez NON à toutes ces questions) ou bien avec un premier commit (qui contiendra alors le ou les fichiers choisis) ?

ou encore, si vous préférez

est-ce que vous avez déjà commencé à créer des commits de votre coté (ne créez pas le README) ou bien est-ce que vous partez vraiment de rien ?

en effet, si vous avez déjà créé un repo quelque part sur votre ordi, il est fortement recommandé de ne pas créer de commit du coté de github, car ensuite il faudrait merger deux fils sans ancêtre commun...

pour créer un fork

il faut aller dans la page du repo sur github, et cliquer sur le bouton Fork en haut à droite

pour inviter des gens dans un repo

passer par l’onglet Settings comme ceci

gh (avancés)

enfin pour les avancés, sachez que toutes les opérations que l’on fait depuis l’interface web peuvent aussi être faits par la ligne de commande en utilisant un outil qui s’appelle gh
voici par exemple comment je crée un repo pour le TP “class-ids” de mon groupe

$ gh repo create --public ue12-p25/git-tp-class-ids-groupe4
✓ Created repository ue12-p25/git-tp-class-ids-groupe4 on GitHub