Benutzer-Werkzeuge

Webseiten-Werkzeuge


server:gitea:datenimport:start

Datenimport

Wenn sehr viele bestehende Daten in eine neue Gitea-Installation importiert werden sollen, dann geht das ganz bequem per Skript. Die Daten (.git) liegen im Importverzeichnis, z. B.:

/mnt/dataSSD/gitea/data/import/eugen

Ausserdem wird ein gültiger Import-Tocken benötigt. Ein neuer Token wird erstellt unter:
Settings | Applications | Generate New Token
Name:

import

Scopes (anhaken):

repo
admin:repo
write:repo

Den Token, genau so wie er oben angezeigt wird, in das Skript kopieren.
ACHTUNG: Der Token wird nur einmal angezeigt!!!

Das ausführbare Skript:

#!/bin/bash
 
# === Konfiguration ===
SRC_BASE="/mnt/dataSSD/gitea/import/eugen"
TMP_BASE="/tmp/gitea-mirror"
HOST="gitea.hoeglinger.name"
OWNER="eugen"
TOKEN="083acf8f9f568ccdd623973ce5c3a6d3a9801d6c"
API_URL="https://$HOST/api/v1/user/repos"
 
mkdir -p "$TMP_BASE"
 
echo "=== STARTE LIVE-IMPORT ALLER REPOS (HTTPS) ==="
echo
 
# Git-Safe-Directory für alle Import-Repos setzen
for repo in "$SRC_BASE"/*.git; do
    [ -d "$repo" ] || continue
    git config --global --add safe.directory "$repo"
done
 
for repo in "$SRC_BASE"/*.git; do
    [ -d "$repo" ] || continue
 
    name=$(basename "$repo" .git)
    echo "=================================================="
    echo "===> Importiere Repository: $name"
    echo "=================================================="
 
    # 1) Repo in Gitea anlegen (falls noch nicht vorhanden)
    echo "--> Erzeuge Repo in Gitea (falls nötig)..."
    curl -s -X POST "$API_URL" \
      -H "Content-Type: application/json" \
      -H "Authorization: token $TOKEN" \
      -d "{
            \"name\": \"$name\",
            \"private\": false
          }" \
      | jq -r '.message // "ok"' 2>/dev/null
 
    # 2) Mirror-Clone lokal erstellen
    workdir="$TMP_BASE/$name.mirror"
    echo "--> Erzeuge Mirror-Clone in $workdir..."
    rm -rf "$workdir"
    if ! git clone --mirror "$repo" "$workdir"; then
        echo "!! Fehler beim Clone von $name"
        continue
    fi
 
    cd "$workdir" || {
        echo "!! Konnte nicht nach $workdir wechseln"
        continue
    }
 
    # 3) Remote zu Gitea setzen (HTTPS + Token)
    echo "--> Setze Remote auf Gitea (HTTPS)..."
    git remote remove gitea 2>/dev/null || true
    git remote add gitea "https://$OWNER:$TOKEN@$HOST/$OWNER/$name.git"
 
    # 4) Mirror-Push
    echo "--> Push --mirror nach Gitea..."
    if git push --mirror gitea; then
        echo "===> OK: $name erfolgreich gespiegelt."
    else
        echo "!! Fehler beim Push von $name"
    fi
 
    echo
done
 
echo "=== LIVE-IMPORT ABGESCHLOSSEN ==="
server/gitea/datenimport/start.txt · Zuletzt geändert: von admin