deploy/hotfix: ne pousser que les branches nommées (plus de co-push de master)

This commit is contained in:
2026-09-07 15:15:36 +02:00
parent 44dcd0192f
commit b4164187d3
3 changed files with 25 additions and 19 deletions
+12 -6
View File
@@ -81,11 +81,15 @@ git deploy gitea prod -m "ajout du bloc contact"
1. commit sur `master` (message obligatoire s'il y a des modifs) ;
2. merge `master``prod` ;
3. push atomique (dernière étape) ;
3. push de `prod` (dernière étape) ;
4. retour sur `master`.
> `git deploy` ne pousse **que les branches nommées**, jamais `master`. Ça évite
> qu'un bare repo serveur (dont le hook n'attend qu'une branche précise) rejette
> le push. Si tu veux sauvegarder `master` sur un remote central : `git push gitea master`.
Plusieurs environnements en une commande (commit unique, merges enchaînés,
**push atomique de tout à la fin** — tout ou rien) :
**push atomique de toutes les branches nommées à la fin** — tout ou rien) :
```bash
git deploy gitea prod stage -m "ajout du bloc contact"
@@ -100,11 +104,13 @@ git hotfix gitea prod -m "fix: lien du menu"
1. met tes modifs de côté (stash) ;
2. bascule sur `prod`, applique et committe le correctif ;
3. rapatrie le correctif dans `master` (merge) ;
4. push atomique puis retour sur `master`.
3. rapatrie le correctif dans `master` en local (merge) ;
4. push de `prod` puis retour sur `master`.
Résultat : le correctif est sur `prod` **et** sur `master`, sans embarquer les
features non livrées de `master`.
Résultat : le correctif est sur `prod` (poussé) **et** dans ton `master` local,
sans embarquer les features non livrées de `master`. Comme `git deploy`, `git
hotfix` ne pousse **que** la branche d'env, pas `master` : ton `master` distant
se mettra à jour quand tu le pousseras explicitement.
## Sûreté
+6 -6
View File
@@ -55,7 +55,7 @@ fi
# ---- Confirmation ----------------------------------------------------------
list="${BRANCHES[*]}"
if [ "$PUSH" = true ]; then push_line="OUI vers '$REMOTE' ($list + '$SOURCE', atomique)"; else push_line="NON (désactivé)"; fi
if [ "$PUSH" = true ]; then push_line="OUI vers '$REMOTE' ($list, atomique)"; else push_line="NON (désactivé)"; fi
[ "$dirty" = 1 ] && commit_line="commit sur '$SOURCE' : \"$MSG\"" || commit_line="aucun commit (arbre propre)"
confirm " • $commit_line
• merge '$SOURCE' → $list
@@ -106,14 +106,14 @@ echo "✓ Local OK : $list."
# ---- Push : dernière étape, atomique, jamais forcé -------------------------
if [ "$PUSH" = true ]; then
echo "→ Vérification du push (dry-run)…"
git push --atomic --dry-run "$REMOTE" "${BRANCHES[@]}" "$SOURCE" \
git push --atomic --dry-run "$REMOTE" "${BRANCHES[@]}" \
|| { echo "✗ Push rejeté au dry-run (non fast-forward ?). RIEN poussé. Local conservé." >&2; exit 1; }
echo "→ Push atomique ($list + '$SOURCE') → '$REMOTE'…"
git push --atomic "$REMOTE" "${BRANCHES[@]}" "$SOURCE" \
echo "→ Push atomique ($list) → '$REMOTE'…"
git push --atomic "$REMOTE" "${BRANCHES[@]}" \
|| { echo "✗ Échec du push. RIEN poussé (atomique). Local conservé." >&2; \
echo " Relance : git push --atomic $REMOTE $list $SOURCE" >&2; exit 1; }
echo " Relance : git push --atomic $REMOTE $list" >&2; exit 1; }
echo "✓ Poussé sur '$REMOTE'."
else
echo "→ (push désactivé) aurait fait : git push --atomic $REMOTE $list $SOURCE"
echo "→ (push désactivé) aurait fait : git push --atomic $REMOTE $list"
fi
echo "✓ Terminé. Tu es sur '$SOURCE'."
+7 -7
View File
@@ -50,7 +50,7 @@ assert_clean_git_state
{ [ "$MSG_SET" = 1 ] && [ -n "$MSG" ]; } || die 'Message requis : -m "…".'
# ---- Confirmation ----------------------------------------------------------
if [ "$PUSH" = true ]; then push_line="OUI vers '$REMOTE' ('$BRANCH' + '$SOURCE', atomique)"; else push_line="NON (désactivé)"; fi
if [ "$PUSH" = true ]; then push_line="OUI vers '$REMOTE' ('$BRANCH')"; else push_line="NON (désactivé)"; fi
confirm " • stash des modifs de '$SOURCE'
• application + commit sur '$BRANCH' : \"$MSG\"
• rapatriement (merge) dans '$SOURCE'
@@ -99,14 +99,14 @@ echo "✓ Local OK : hotfix sur '$BRANCH' + rapatrié dans '$SOURCE'."
# ---- Push : dernière étape, atomique, jamais forcé -------------------------
if [ "$PUSH" = true ]; then
echo "→ Vérification du push (dry-run)…"
git push --atomic --dry-run "$REMOTE" "$BRANCH" "$SOURCE" \
git push --dry-run "$REMOTE" "$BRANCH" \
|| { echo "✗ Push rejeté au dry-run (non fast-forward ?). RIEN poussé. Local conservé." >&2; exit 1; }
echo "→ Push atomique '$BRANCH' + '$SOURCE' → '$REMOTE'…"
git push --atomic "$REMOTE" "$BRANCH" "$SOURCE" \
|| { echo "✗ Échec du push. RIEN poussé (atomique). Local conservé." >&2; \
echo " Relance : git push --atomic $REMOTE $BRANCH $SOURCE" >&2; exit 1; }
echo "→ Push '$BRANCH' → '$REMOTE'…"
git push "$REMOTE" "$BRANCH" \
|| { echo "✗ Échec du push. RIEN poussé. Local conservé." >&2; \
echo " Relance : git push $REMOTE $BRANCH" >&2; exit 1; }
echo "✓ Poussé sur '$REMOTE'."
else
echo "→ (push désactivé) aurait fait : git push --atomic $REMOTE $BRANCH $SOURCE"
echo "→ (push désactivé) aurait fait : git push $REMOTE $BRANCH"
fi
echo "✓ Terminé. Tu es sur '$SOURCE'."