# niikn-kb-sync.ps1 — автосинхронизация базы знаний НИИКН с Gitea # Запускается Scheduled Task каждые ~7 минут. Тянет изменения с сервера, # коммитит локальные правки и отправляет обратно. Лог: niikn-kb-sync.log $ErrorActionPreference = "Continue" $base = "C:\Users\msi\Documents\niikn-knowledge-base" $git = "C:\Program Files\Git\cmd\git.exe" $log = "$base\niikn-kb-sync.log" function Log($m) { "$([DateTime]::Now.ToString('yyyy-MM-dd HH:mm:ss')) $m" | Add-Content -Path $log -Encoding UTF8 } # mutex — не запускать второй экземпляр $mtx = New-Object System.Threading.Mutex($false, "niikn-kb-sync") if (-not $mtx.WaitOne(0)) { exit 0 } try { Set-Location $base # подтянуть с сервера (rebase, чтобы не плодить merge-коммиты) & $git pull --rebase --autostash origin main 2>&1 | Out-Null # есть ли локальные изменения? $status = & $git status --porcelain if ($status) { & $git add -A 2>&1 | Out-Null & $git commit -m "auto-sync $([DateTime]::Now.ToString('yyyy-MM-dd HH:mm'))" 2>&1 | Out-Null Log "committed local changes" } # отправить (если есть что) $push = & $git push origin main 2>&1 if ($LASTEXITCODE -eq 0) { Log "sync ok" } else { Log "push issue: $push" } } catch { Log "ERROR: $_" } finally { $mtx.ReleaseMutex() }