#!/usr/bin/env bash # migrate-to-gitlab.sh # Usage: migrate-to-gitlab.sh # Migre le dépôt Git du dossier courant vers GitLab. # - Récupère toutes les branches distantes (Gitea) # - Remplace l'URL d'origin par GitLab # - Pousse toutes les branches et les tags set -euo pipefail GITLAB_BASE="git@gitlab.com" # --- Validation des arguments --- if [[ $# -ne 1 ]]; then echo "Usage: $(basename "$0") " >&2 echo "Exemple: $(basename "$0") odupont/lighty-dmap" >&2 exit 1 fi TARGET="$1" if [[ ! "$TARGET" =~ ^[^/]+/[^/]+$ ]]; then echo "Erreur : le format attendu est pseudo/nom_dépôt (ex: odupont/lighty-dmap)" >&2 exit 1 fi # --- Vérification : être dans un dépôt Git --- if ! git rev-parse --git-dir > /dev/null 2>&1; then echo "Erreur : le dossier courant n'est pas un dépôt Git." >&2 exit 1 fi REPO_ROOT="$(git rev-parse --show-toplevel)" GITLAB_URL="${GITLAB_BASE}:${TARGET}.git" echo "==> Dépôt local : $REPO_ROOT" echo "==> Destination : $GITLAB_URL" echo "" # --- Récupération de toutes les branches distantes --- echo "==> Récupération des branches depuis origin (Gitea)..." git fetch --all --prune # Créer localement toutes les branches distantes qui n'existent pas encore git branch -r \ | grep -v '\->' \ | grep '^ origin/' \ | sed 's|^ origin/||' \ | while read -r branch; do if ! git show-ref --verify --quiet "refs/heads/$branch"; then echo " Création branche locale : $branch" git branch "$branch" "origin/$branch" fi done # --- Affichage de l'état avant modification --- OLD_URL="$(git remote get-url origin 2>/dev/null || echo '(aucun remote origin)')" echo "" echo "==> Remote actuel (origin) : $OLD_URL" echo "==> Nouveau remote (GitLab): $GITLAB_URL" echo "" read -rp "Confirmer la migration ? [o/N] " confirm if [[ ! "$confirm" =~ ^[oO]$ ]]; then echo "Migration annulée." exit 0 fi # --- Remplacement de l'URL d'origin --- echo "" echo "==> Mise à jour de l'URL d'origin..." git remote set-url origin "$GITLAB_URL" # --- Push de toutes les branches --- echo "==> Push de toutes les branches..." git push --all origin # --- Push des tags --- echo "==> Push des tags..." git push --tags origin echo "" echo "Migration terminée." echo "Dépôt disponible sur : https://gitlab.com/${TARGET}" echo "(Le dépôt a été créé automatiquement par GitLab si besoin.)"