Ampel / ampel (push) Successful in 22s
Gitea-Zugang laeuft seit 21.08. ueber ssh://gitea@192.168.178.153:2222. Fehlermeldung nennt jetzt die richtige Pruefung - inklusive der Falle, dass der SSH-Benutzer 'gitea' heisst und nicht 'git'. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
92 lines
3.5 KiB
PowerShell
92 lines
3.5 KiB
PowerShell
<#
|
|
push-und-sync.ps1 — der Handschlag zwischen PC und AI-Box (21.08.2026).
|
|
|
|
Bahn: PC (Quelle der Wahrheit) -> Gitea -> Box ~/projekte
|
|
|
|
Warum ueberhaupt ein Skript: `projekte-sync` laeuft auf der Box stuendlich. Wer
|
|
gerade gepusht hat, will aber nicht bis zu 60 Minuten warten. Das hier stoesst
|
|
denselben Dienst sofort an — kein zweiter Mechanismus, nur ein Ausloeser.
|
|
|
|
Warum PowerShell und nicht Git-Bash: Push zum Gitea geht vom PC nur ueber den
|
|
Git Credential Manager, und den gibt es hier (Lehre vom 24.07.).
|
|
|
|
Aufruf (im Projektordner):
|
|
.\deploy\push-und-sync.ps1
|
|
.\deploy\push-und-sync.ps1 -NurSync # nicht pushen, nur Box nachziehen
|
|
.\deploy\push-und-sync.ps1 -Pfad "F:\Coding Stuff\rippy"
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[string] $Pfad = (Get-Location).Path,
|
|
[switch] $NurSync,
|
|
[string] $BoxHost = "hitonabi@192.168.178.151"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
function Schritt($text) { Write-Host "`n== $text" -ForegroundColor Cyan }
|
|
function Gut($text) { Write-Host " $text" -ForegroundColor Green }
|
|
function Warn($text) { Write-Host " $text" -ForegroundColor Yellow }
|
|
|
|
Set-Location $Pfad
|
|
|
|
# --- 1. Ist das ueberhaupt ein Repo, und was steht an? ---------------------
|
|
$null = git rev-parse --is-inside-work-tree 2>$null
|
|
if ($LASTEXITCODE -ne 0) { throw "Kein Git-Repository: $Pfad" }
|
|
|
|
$zweig = (git branch --show-current).Trim()
|
|
|
|
# Repo-Name aus der Remote-URL, NICHT aus dem Ordnernamen: der lokale Ordner heisst
|
|
# z. B. "mission-control-2", das Gitea-Repo aber "mission-control-v2". Der Ordnername
|
|
# haette die Box-Abfrage still ins Leere laufen lassen.
|
|
$remote = (git remote get-url origin).Trim()
|
|
$repo = [System.IO.Path]::GetFileNameWithoutExtension(($remote -split '/')[-1])
|
|
Schritt "Repo '$repo', Zweig '$zweig'"
|
|
|
|
$offen = git status --porcelain
|
|
if ($offen) {
|
|
Warn "Es liegen unversionierte/ungespeicherte Aenderungen:"
|
|
$offen | Select-Object -First 10 | ForEach-Object { Warn " $_" }
|
|
Warn "Diese werden NICHT mitgeschickt. Erst committen, dann erneut aufrufen."
|
|
}
|
|
|
|
# --- 2. Pushen ------------------------------------------------------------
|
|
if (-not $NurSync) {
|
|
$ausstehend = git log --oneline "origin/$zweig..HEAD" 2>$null
|
|
if (-not $ausstehend) {
|
|
Gut "Nichts zu pushen — Gitea ist bereits auf Stand."
|
|
} else {
|
|
Schritt "Push nach Gitea ($(($ausstehend | Measure-Object).Count) Commit(s))"
|
|
$ausstehend | ForEach-Object { Write-Host " $_" }
|
|
git push origin $zweig
|
|
if ($LASTEXITCODE -ne 0) {
|
|
throw @"
|
|
Push fehlgeschlagen.
|
|
Seit 21.08. laeuft der Weg ueber SSH: ssh://gitea@192.168.178.153:2222/...
|
|
Pruefen mit: ssh -T gitea
|
|
Kommt dort keine Begruessung, lauscht Giteas SSH-Server nicht (Port 2222,
|
|
START_SSH_SERVER in /etc/gitea/app.ini) oder id_general ist nicht hinterlegt.
|
|
Der SSH-Benutzer heisst 'gitea', NICHT 'git' - Gitea laeuft unter diesem Namen.
|
|
"@
|
|
}
|
|
Gut "gepusht"
|
|
}
|
|
}
|
|
|
|
# --- 3. Box nachziehen lassen --------------------------------------------
|
|
Schritt "Box zieht nach (projekte-sync)"
|
|
ssh $BoxHost "systemctl --user start projekte-sync.service"
|
|
if ($LASTEXITCODE -ne 0) { throw "Sync-Dienst liess sich nicht starten." }
|
|
|
|
$stand = ssh $BoxHost "cd ~/projekte/$repo 2>/dev/null && git log --oneline -1 || echo 'NICHT-IN-PROJEKTE'"
|
|
if ($stand -eq "NICHT-IN-PROJEKTE") {
|
|
Warn "'$repo' liegt nicht unter ~/projekte."
|
|
Warn "Bei mission-control-v2 ist das ABSICHT: das Live-Deployment liegt in ~/mission-control-v2"
|
|
Warn "und wird bewusst nicht automatisch gezogen — es braucht seinen eigenen Deploy-Schritt."
|
|
} else {
|
|
Gut "Box steht jetzt auf: $stand"
|
|
}
|
|
|
|
Write-Host ""
|