Flux de travail du responsable #

Cette page est destinée aux mainteneurs - ceux d'entre nous qui fusionnent nos propres modifications ou celles d'autres personnes dans le référentiel en amont.

En tant que mainteneur, vous maîtrisez parfaitement les éléments de base du workflow de développement .

Les instructions de Liaison de votre référentiel au référentiel en amont ajoutent une télécommande disposant d'un accès en lecture seule au référentiel en amont. En tant que mainteneur, vous avez un accès en lecture-écriture.

C'est bien d'avoir un nom effrayant pour votre télécommande en amont, pour vous rappeler qu'il s'agit d'une télécommande en lecture-écriture :

git remote add upstream-rw [email protected]:matplotlib/matplotlib.git
git fetch upstream-rw

Intégration des changements #

Supposons que vous ayez des modifications à apporter au coffre ( upstream-rw/main).

Les changements sont dans une branche sur laquelle vous vous trouvez actuellement. Par exemple, vous examinez les modifications de quelqu'un comme ceci :

git remote add someone https://github.com/someone/matplotlib.git
git fetch someone
git branch cool-feature --track someone/cool-feature
git checkout cool-feature

Vous êtes donc maintenant sur la branche avec les modifications à intégrer en amont. Le reste de cette section suppose que vous êtes sur cette branche.

Quelques commits #

S'il n'y a que quelques commits, envisagez de rebaser vers l'amont :

# Fetch upstream changes
git fetch upstream-rw
# rebase
git rebase upstream-rw/main

N'oubliez pas que si vous effectuez un rebase et que vous le poussez, vous devrez fermer manuellement toutes les demandes d'extraction github, car github ne pourra pas détecter les modifications qui ont déjà été fusionnées.

Une longue série de commits #

S'il existe une série plus longue de commits associés, envisagez plutôt une fusion :

git fetch upstream-rw
git merge --no-ff upstream-rw/main

La fusion sera détectée par github et devrait fermer automatiquement toutes les demandes d'extraction associées.

Notez ce qui --no-ffprécède. Cela oblige git à faire un commit de fusion, plutôt que de faire une avance rapide, de sorte que cet ensemble de commits se ramifie hors du tronc puis rejoigne l'historique principal avec une fusion, plutôt que de sembler avoir été fait directement au-dessus du tronc.

Vérifier l'historique #

Maintenant, dans les deux cas, vous devez vérifier que l'historique est raisonnable et que vous avez les bons commits :

git log --oneline --graph
git log -p upstream-rw/main..

La première ligne ci-dessus montre simplement l'historique de manière compacte, avec une représentation textuelle du graphique d'historique. La deuxième ligne affiche le journal des commits en excluant ceux qui peuvent être atteints depuis le tronc ( upstream-rw/main), et en incluant ceux qui peuvent être atteints depuis le HEAD actuel (sous-entendu avec le .. à la fin). Ainsi, il montre les commits uniques à cette branche par rapport au tronc. L' -poption affiche le diff pour ces commits sous forme de patch.

Pousser vers le coffre #

git push upstream-rw my-new-feature:main

Cela pousse la my-new-featurebranche de ce référentiel vers la main branche du upstream-rwréférentiel.