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¶
chaque compte a un nom unique (votre identifiant github par exemple), et
on peut ranger autant de repos qu’on veut dans cet espaceon peut aussi créer des organisations (
ue12-p25
par exemple)
et pareil, dans une organisation on peut mettre autant de repos qu’on veutque ce soit dans un compte ou une orga, l’URL d’un repo est toujours de la forme
https://github .com /le -compte -ou -l -orga /le -nom -du -repo
comme par exemple, pour ce cours justement:https://github.com/ue12-p25/git
(ou encore,git@github.com:ue12-p25/git.git
avec ssh)
le remote origin
toujours au sujet des noms, vous pouvez noter que le plus souvent,
si vous avez dans votre repo local un remote qui s’appelle origin
,
avec nos pratiques le plus souvent ce remote correspond au repo sur github:
# pour lister les remotes
$ git remote
origin
# pour voir à quelle URL correspond le remote 'origin'
$ git remote get-url origin
git@github.com:ue12-p25/git.git
créer un alias
si comme moi vous avez du mal à retenir cette dernière commande, c’est le moment de vous créer un alias:
git config --global alias.url "remote get-url origin"
après quoi il vous suffira de faire
$ git url
git@github.com:ue12-p25/git.git
les accès¶
signalons aussi que chaque repo peut être public ou privé
pour la suite, si on ne précise rien, ce sera pour parler de repos publicsun repo public peut être
lu, et donc aussi cloné, par tout le monde
écrit (ou pourra pousser dedans) par une liste finie de gens définie dans les Settings du repo (et de l’orga)un repo privé quant à lui peut être
lu et écrit par une liste finie de gens (idem)
le workflow usuel¶
Alice publie du code¶
dans un scénario typique:
- 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 - lorsqu’elle est contente elle va “mettre cela sur github”
c’est-à-dire créer un repo vide danshttps://github.com/alice/rhubarbe
et pousser son repo dedans - son travail devient donc accessible à tout le monde, et Bob le remarque
- il télécharge alors le contenu du repo sur son ordi
avec un
git clone
d’autres gens s’en servent: les Issues¶
- les gens qui utilisent le logiciel ont à leur disposition (dans le repo d’Alice) un espace qui s’appelle Issues
- 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 danshttps://github.com/alice/rhubarbe/issues
Bob modifie le code pour ses besoins¶
- à ce stade Bob a tout sur son ordi, il peut modifier ce qu’il veut...
- 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¶
- 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 - 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 danshttps://github.com/bob/rhubarbe
- 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¶
- 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
- 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
- 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 - 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
- pendant cette discussion Bob continue à écrire dans son repo, pour tenir compte des demandes d’Alice
- enfin, si/quand on arrive à un accord, Alice peut en un clic merger les changements de Bob dans son propre repo
- 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 derhubarbe
et là Bob est très content 🙂 - 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