deploy: autoriser SOURCE dans la liste (poussée telle quelle, sans merge)

This commit is contained in:
2026-09-07 16:26:48 +02:00
parent b4164187d3
commit 210efa5994
2 changed files with 21 additions and 5 deletions
+10 -3
View File
@@ -84,9 +84,16 @@ git deploy gitea prod -m "ajout du bloc contact"
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`.
> `git deploy` ne pousse **que les branches nommées**, jamais `master` implicitement.
> Ça évite qu'un bare repo serveur (dont le hook n'attend qu'une branche précise)
> rejette le push.
>
> Pour sauvegarder `master` sur un remote central, inclus-le explicitement dans la
> liste — il sera poussé tel quel (sans merge) :
>
> ```bash
> git deploy gitea master prod stage -m "message"
> ```
Plusieurs environnements en une commande (commit unique, merges enchaînés,
**push atomique de toutes les branches nommées à la fin** — tout ou rien) :
+11 -2
View File
@@ -40,10 +40,10 @@ git remote get-url "$REMOTE" >/dev/null 2>&1 || die "Remote inconnu : $REMOTE"
seen=""
for b in "${BRANCHES[@]}"; do
git show-ref --verify --quiet "refs/heads/$b" || die "Branche locale inconnue : $b"
[ "$b" != "$SOURCE" ] || die "'$SOURCE' est la branche de dev, pas une branche de déploiement."
case " $seen " in *" $b "*) die "Branche indiquée en double : $b" ;; esac
seen="$seen $b"
done
# '$SOURCE' est autorisée dans la liste : elle sera poussée telle quelle (pas de merge).
current=$(git branch --show-current)
[ "$current" = "$SOURCE" ] || die "Place-toi sur '$SOURCE' pour déployer (git switch $SOURCE)."
assert_clean_git_state
@@ -55,10 +55,15 @@ fi
# ---- Confirmation ----------------------------------------------------------
list="${BRANCHES[*]}"
# branches réellement fusionnées = toutes sauf SOURCE (qui est poussée telle quelle)
merge_list=""
for b in "${BRANCHES[@]}"; do [ "$b" != "$SOURCE" ] && merge_list="$merge_list $b"; done
merge_list="${merge_list# }"
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)"
[ -n "$merge_list" ] && merge_line="merge '$SOURCE' → $merge_list" || merge_line="aucun merge (push direct)"
confirm " • $commit_line
• merge '$SOURCE' → $list
$merge_line
• push : $push_line"
# ---- Sauvegarde de l'état pour rollback ------------------------------------
@@ -96,6 +101,10 @@ if [ "$dirty" = 1 ]; then
fi
for b in "${BRANCHES[@]}"; do
if [ "$b" = "$SOURCE" ]; then
echo "✓ '$b' (dev) incluse au push telle quelle."
continue
fi
git switch -q "$b" || fail "Impossible de basculer sur '$b'."
git merge --no-edit -q "$SOURCE" || fail "Conflit de merge sur '$b'."
echo "✓ '$b' à jour depuis '$SOURCE'."