Carnet Wiki

Proposer un patch via git.spip.net pour le noyau ou la dist

Version 7 — Mai 2019 JLuc

Cet article présente les informations et étapes permettant de se servir des dépots git.spip.net pour proposer un patch pour le noyau de SPIP et pour les plugins-dist.

Pour l’instant, seule la solution passant par l’UI gitea en ligne ( gitea pour git est détaillée .spip.net) a été détaillée, par JLuc initialement, puis par Cerdic, avec quelques différences.
TODO : préciser la soluce cerdic, tester les différences, fusionner et détailler les étapes.

Liste des repos

-  le core de SPIP : https://git.spip.net/SPIP/spip/

-  les plugins-dist sont dans le dossier https://git.spip.net/dist et il y a un repo par plugin.
Par exemple : https://git.spip.net/dist/organiseur

Soluce par Cerdic

La bonne méthode c’est en effet toujours de faire une branche pour une PR, en repartant du dernier état du master source.

Par exemple, si origin est ton propre repo, et officiel est le repo officiel SPIP (les deux remote), tu vas faire quelque chose comme :

- Récupérer les sources à jour depuis officiel :
git fetch officiel

- Checkout la dernière version du master du repo officiel :
git checkout officiel/master

- Créer ta branche de travail à partir de là :
git checkout -b ma-super-proposition

- Faire les modifs et commit

- Quand c’est finis, tu push sur ton repo :
git push origin ma-super-proposition

- Là tu n’a plus qu’à aller sur l’interface web et cliquer sur « Proposer une PR » à partir de cette branche.
La PR sera propre car ne comportant que les commits proposés et directement mergeable, ce qui en facilite le traitement et le merge dans le repo officiel.

Explications initiales , légèrement différentes


Cloner

Cloner le repo sur git.spip.net net

Via l’UI gitea (bouton "bifurcation" ou "fork")

Via l’UI gitea (bouton "bifurcation" ou "fork"). Si votre pseudo est monpseudo, cela crée un repo https://git.spip.net/monpseudo/spip ou https://git.spip.net/monpseudo/organiseur

Cloner localement le repo repo

Cloner localement votre clone distant.

Pour le core :

git clone https://git.spip.net/monpseudo/spip.git

Pour un plugin, par exemple :

git clone https://git.spip.net/monpseudo/organiseur.git

Brancher localement

Brancher localement


La branche servira à faire la modif proposée sur une base propre et qui ne servira que pour ce patch.

git branch ma_modif

se mettre sur la branche

git checkout ma_modif

Créer la branche sur votre repo distant en la reliant à sa version locale

git push --set-upstream monpseudo ma_modif

Editer

Editer les fichiers fichiers


Faire vos modifs dans les fichiers

Commiter

Commiter et pusher pusher

Commiter toutes vos modifs sur cette branche (locale) :

git commit -am "un joli message de log"

Reporter sur votre repo distant :

git push

Proposer

Proposer le patch aux repos SPIP SPIP

Via l’UI gitea : dans l’onglet « Demandes d’ajout » de votre repo cloné distant, cliquez « Nouvelle demande d’ajout ».
-  Dans le 1er select, laissez la destination « SPIP:master ».
-  Dans le 2e select, choisissez la branche d’origine : « monpseudo:ma_modif »
-  Vérifiez le message de commit et validez avec « Créez une demande d’ajout »
Voilà . Votre proposition se retrouve sur https://git.spip.net/SPIP/spip/pulls

Pour github c’est presque pareil : https://help.github.com/en/articles/creating-a-pull-request

Voilà.
Votre proposition se retrouve sur https://git.spip.net/SPIP/spip/pulls

La prochaine fois

Si vous devez améliorer votre patch, restez sur cette branche ou revenez y :
git checkout ma_modif

Synchronisez votre dépot avec les devs SPIP (master).

-  Q : quelle commande ?

(vérifier : git pull)

Proposer un PR en ligne de commande

PR }

Passer par l’interface Web comme il est décrit plus haut ne devrait être utilisé que dans les cas simple comme la correction d’un faute de typo. Dans le cas général, la solution recommandée est d’utiliser une copie locale du dépôt GIT.

- Q : quelle commande ? Comment faire pour faire une PR tout en local, sans passer par l’intermédiaire d’un clone distant et de l’UI gitea ?