deploy: autoriser SOURCE dans la liste (poussée telle quelle, sans merge)
This commit is contained in:
@@ -84,9 +84,16 @@ git deploy gitea prod -m "ajout du bloc contact"
|
|||||||
3. push de `prod` (dernière étape) ;
|
3. push de `prod` (dernière étape) ;
|
||||||
4. retour sur `master`.
|
4. retour sur `master`.
|
||||||
|
|
||||||
> `git deploy` ne pousse **que les branches nommées**, jamais `master`. Ça évite
|
> `git deploy` ne pousse **que les branches nommées**, jamais `master` implicitement.
|
||||||
> qu'un bare repo serveur (dont le hook n'attend qu'une branche précise) rejette
|
> Ça évite qu'un bare repo serveur (dont le hook n'attend qu'une branche précise)
|
||||||
> le push. Si tu veux sauvegarder `master` sur un remote central : `git push gitea master`.
|
> 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,
|
Plusieurs environnements en une commande (commit unique, merges enchaînés,
|
||||||
**push atomique de toutes les branches nommées à la fin** — tout ou rien) :
|
**push atomique de toutes les branches nommées à la fin** — tout ou rien) :
|
||||||
|
|||||||
+11
-2
@@ -40,10 +40,10 @@ git remote get-url "$REMOTE" >/dev/null 2>&1 || die "Remote inconnu : $REMOTE"
|
|||||||
seen=""
|
seen=""
|
||||||
for b in "${BRANCHES[@]}"; do
|
for b in "${BRANCHES[@]}"; do
|
||||||
git show-ref --verify --quiet "refs/heads/$b" || die "Branche locale inconnue : $b"
|
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
|
case " $seen " in *" $b "*) die "Branche indiquée en double : $b" ;; esac
|
||||||
seen="$seen $b"
|
seen="$seen $b"
|
||||||
done
|
done
|
||||||
|
# '$SOURCE' est autorisée dans la liste : elle sera poussée telle quelle (pas de merge).
|
||||||
current=$(git branch --show-current)
|
current=$(git branch --show-current)
|
||||||
[ "$current" = "$SOURCE" ] || die "Place-toi sur '$SOURCE' pour déployer (git switch $SOURCE)."
|
[ "$current" = "$SOURCE" ] || die "Place-toi sur '$SOURCE' pour déployer (git switch $SOURCE)."
|
||||||
assert_clean_git_state
|
assert_clean_git_state
|
||||||
@@ -55,10 +55,15 @@ fi
|
|||||||
|
|
||||||
# ---- Confirmation ----------------------------------------------------------
|
# ---- Confirmation ----------------------------------------------------------
|
||||||
list="${BRANCHES[*]}"
|
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
|
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)"
|
[ "$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
|
confirm " • $commit_line
|
||||||
• merge '$SOURCE' → $list
|
• $merge_line
|
||||||
• push : $push_line"
|
• push : $push_line"
|
||||||
|
|
||||||
# ---- Sauvegarde de l'état pour rollback ------------------------------------
|
# ---- Sauvegarde de l'état pour rollback ------------------------------------
|
||||||
@@ -96,6 +101,10 @@ if [ "$dirty" = 1 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for b in "${BRANCHES[@]}"; do
|
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 switch -q "$b" || fail "Impossible de basculer sur '$b'."
|
||||||
git merge --no-edit -q "$SOURCE" || fail "Conflit de merge sur '$b'."
|
git merge --no-edit -q "$SOURCE" || fail "Conflit de merge sur '$b'."
|
||||||
echo "✓ '$b' à jour depuis '$SOURCE'."
|
echo "✓ '$b' à jour depuis '$SOURCE'."
|
||||||
|
|||||||
Reference in New Issue
Block a user