|
@@ -11,23 +11,24 @@ output:
|
|
|
Imaginons que Julien propose un dépôt public, visible par tout le monde, mais
|
|
|
non modifiable (pour éviter que n'importe qui y fasse n'importe quoi). Si
|
|
|
Fabien (à qui il arrive parfois de faire n'importe quoi) veut proposer une
|
|
|
-modification, il peut alors copier le dépôt de Julien (fork), faire ses
|
|
|
+modification, il peut alors copier (forker) le dépôt de Julien, faire ses
|
|
|
modifications dans son dépôt, puis les soumettre à Julien (pull request), qui
|
|
|
choisira ou non de les intégrer dans le dépôt initial (upstream).
|
|
|
|
|
|
Le fork est un mode de fonctionnement très répandu dans le monde de
|
|
|
-l'open-source (github entre autres).
|
|
|
-Le serveur gogs du SCOSI possède également une partie publique mais visible
|
|
|
-après connexion (donc réservée aux étudiants et personnels de l'université).
|
|
|
+l'open-source (github entre autres). Le serveur gogs de l'université possède
|
|
|
+également une partie publique propice aux forks (cette partie publique est
|
|
|
+cependant réservée aux personnes ayant des identifiants à l'université).
|
|
|
|
|
|
-Attention : pour les intervenants réguliers et de confiance, il est plus simple
|
|
|
+Remarque : pour les intervenants réguliers et de confiance, il est plus simple
|
|
|
de les autoriser à modifier directement le dépôt principal, en les ajoutant
|
|
|
-comme collaborateurs (les deux systèmes sont complémentaires).
|
|
|
+comme collaborateurs. Les deux systèmes (forks et collaboration) sont
|
|
|
+complémentaires.
|
|
|
|
|
|
## Forker un dépôt distant
|
|
|
|
|
|
Le dépôt de Julien est déjà sur le serveur, dans la partie publique. Fabien se
|
|
|
-connecte sur le site gogs du SCOSI.
|
|
|
+connecte sur le site gogs de l'université.
|
|
|
|
|
|
![](forks_01.png)
|
|
|
|
|
@@ -61,8 +62,8 @@ Fabien peut ensuite cloner son nouveau dépôt...
|
|
|
|
|
|
## Envoyer un pull request
|
|
|
|
|
|
-Un pull request est une demande d'intégrer une modification d'un dépôt forké
|
|
|
-dans le dépôt initial (upstream).
|
|
|
+Un pull request permet de demander d'intégrer d'une modification d'un dépôt
|
|
|
+forké dans le dépôt initial (upstream).
|
|
|
|
|
|
Jusqu'ici, Fabien a forké le dépôt de Julien et fait des modifications sur son
|
|
|
dépôt forké. Pour soumettre ses modifications, il va sur la page correspondant
|
|
@@ -70,7 +71,7 @@ dépôt forké. Pour soumettre ses modifications, il va sur la page correspondan
|
|
|
|
|
|
![](forks_07.png)
|
|
|
|
|
|
-Il met un message pour Julien, expliquant ses modifications (ou pas).
|
|
|
+Il met un message pour Julien, expliquant ses modifications (ou pas d'ailleurs).
|
|
|
|
|
|
![](forks_08.png)
|
|
|
|
|
@@ -89,7 +90,7 @@ Fabien puis finalement accepter (ou refuser) les modifications.
|
|
|
|
|
|
![](forks_j11.png)
|
|
|
|
|
|
-Si le pull request est accepté, la modification est fusionné dans le dépôt.
|
|
|
+Si le pull request est accepté, la modification est fusionnée dans le dépôt.
|
|
|
|
|
|
![](forks_j12.png)
|
|
|
|
|
@@ -98,30 +99,35 @@ Elle apparait alors dans la liste des commits.
|
|
|
![](forks_j13.png)
|
|
|
|
|
|
Si les modifications du fork ont été faites dans une nouvelle branche, il ne
|
|
|
-faut pas oublier de fusionner dans la branche master sur le dépôt upstream.
|
|
|
+faut pas oublier de la fusionner dans le master, sur le dépôt upstream.
|
|
|
+
|
|
|
+En cas de conflit, le pull request doit être intégré manuellement (voir section
|
|
|
+suivante).
|
|
|
|
|
|
## Mettre à jour un dépôt forké, spécifier manuellement les dépots distants
|
|
|
|
|
|
Après un fork, les deux dépôts (fork et upstream) peuvent évoluer
|
|
|
-indépendamment. Pour récupérer les modifications du dépôt initial dans le
|
|
|
-dépôt forké, il suffit de l'ajouter comme dépôt distant (généralement, on
|
|
|
-utilise le nom "upstream") :
|
|
|
+indépendamment. Pour récupérer les nouvelles modifications du dépôt initial
|
|
|
+dans le dépôt forké, il suffit de l'ajouter comme dépôt distant (généralement,
|
|
|
+on utilise le nom "upstream") :
|
|
|
|
|
|
```
|
|
|
git remote add upstream https://gogs.univ-littoral.fr/jdehos/tutoriel_git
|
|
|
```
|
|
|
|
|
|
-On peut ensuite récupérer les évolutions de upstream et les fusionner dans le
|
|
|
-dépôt forké :
|
|
|
+On peut ensuite récupérer les évolutions du dépôt upstream et les fusionner
|
|
|
+dans le dépôt forké :
|
|
|
|
|
|
```
|
|
|
git fetch upstream
|
|
|
git merge upstream/master
|
|
|
```
|
|
|
|
|
|
-Cette gestion des dépôts distants est très puissante. Elle permet, par exemple, de
|
|
|
-créer un dépôt public et un dépôt privé pour un même projet et de les
|
|
|
-synchroniser. Elle permet également de gérer un pull request manuellement (par
|
|
|
+Cette gestion des dépôts distants est très puissante. Elle permet, par exemple,
|
|
|
+de créer, pour un même projet, un dépôt distant public et un dépôt distant privé
|
|
|
+(éventuellement sur des serveurs différents) et de les synchroniser.
|
|
|
+
|
|
|
+Ainsi, pour gérer un pull request manuellement (par
|
|
|
exemple pour fusionner dans une branche différente que celle du pull request) :
|
|
|
|
|
|
```
|
|
@@ -138,17 +144,31 @@ git merge fork_fabien/master
|
|
|
Résumé des commandes git précédentes :
|
|
|
|
|
|
---|---|
|
|
|
-`git remote add ...` | TODO |
|
|
|
-`git fetch ...` | |
|
|
|
-`git merge ...` | |
|
|
|
+`git remote add <nom> <url>` | ajoute un dépôt distant |
|
|
|
+`git fetch <nom>` | récupère les commits d'un dépôt distant |
|
|
|
|
|
|
Quelques conseils de méthode de travail :
|
|
|
|
|
|
-- TODO
|
|
|
+- ajoutez les membres du projet comme collaborateurs du dépôt distant
|
|
|
+- pour les dépôts publics, utilisez les pull requests pour récupérer les
|
|
|
+ éventuelles contributions de la communauté
|
|
|
+
|
|
|
+## Exercice 1
|
|
|
+
|
|
|
+- associez-vous à un ou deux collègues : l'un d'entre vous va créer un dépôt
|
|
|
+ public, les autres vont le forker et soumettre des pull-requests
|
|
|
|
|
|
-## Exercice
|
|
|
+## Exercice 2
|
|
|
|
|
|
-TODO
|
|
|
+- créez deux dépôts distants, l'un publique, l'autre privé
|
|
|
+- clonez le dépôt privé, faites-y quelques commits et pushez le tout
|
|
|
+- toujours dans le dépôt privé local, créez une branche "public", fusionnez-y
|
|
|
+ le master et pushez-la sur le dépôt distant privé et sur le dépôt distant
|
|
|
+public
|
|
|
+- faites un nouveau commit dans le master, fusionnez-le dans la branche
|
|
|
+ "public" et pushez le tout
|
|
|
+- clonez le dépôt public et mettez-le à jour avec la branche "public" du dépôt
|
|
|
+ distant privé
|
|
|
|
|
|
* * * * *
|
|
|
|