From b4164187d3ba7de7610d0ddafd1301d939b0b81e Mon Sep 17 00:00:00 2001 From: bachir Date: Mon, 7 Sep 2026 15:15:36 +0200 Subject: [PATCH] =?UTF-8?q?deploy/hotfix:=20ne=20pousser=20que=20les=20bra?= =?UTF-8?q?nches=20nomm=C3=A9es=20(plus=20de=20co-push=20de=20master)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++++++++++++------ git-deploy | 12 ++++++------ git-hotfix | 14 +++++++------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 5615354..24c4285 100644 --- a/README.md +++ b/README.md @@ -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é diff --git a/git-deploy b/git-deploy index 82f8a97..f55806c 100755 --- a/git-deploy +++ b/git-deploy @@ -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'." diff --git a/git-hotfix b/git-hotfix index 61ffe63..e26f501 100755 --- a/git-hotfix +++ b/git-hotfix @@ -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'."