--- name: roa-git-svn-commit description: Fluxul de commit si sincronizare pentru biblioteca partajata COMUN (SVN = sursa de adevar, git = oglinda), cu arbore de decizie pentru roa_sync, write-back, aprobare explicita si svn commit tintit, ca sa nu pierzi munca necomisa. Foloseste-l OBLIGATORIU cand utilizatorul spune "am terminat, dau commit", "vreau sa comit in COMUN", "comit ce am lucrat", "sincronizeaza cu SVN", "adu ce au facut altii", "ruleaza roa_sync", "de ce nu merge git pull in COMUN" sau cere orice commit/sincronizare care atinge COMUN. Regula centrala: pe main din COMUN scrie DOAR roa_sync, commit-urile se fac tintit pe fisierele aprobate (niciodata pe tot COMUN), iar git pull in COMUN este interzis. Nu improviza ordinea pasilor si nu rula roa_sync pe un tree murdar: distruge munca necomisa. --- # Commit si sincronizare in COMUN (SVN + git) SVN = sursa de adevar. git = oglinda. Pe `main` din COMUN scrie **doar** `roa_sync`. Nimic nu se comite fara un "da" explicit de la utilizator. ## Fluxul complet (comenzi, in ordinea asta) ```powershell # 0. radacina proiectului - o cauti, nu o hardcodezi (urci pana gasesti roa_sync.bat) $Root = (Get-Location).Path while ($Root -and -not (Test-Path (Join-Path $Root 'roa_sync.bat'))) { $Root = Split-Path $Root } # 1. ce e de comis svn status "$Root" # M/A/D = de comis in SVN; ? = neversionat git -C "$Root" status --short # oglinda (doar informativ) # 2. arata lista de fisiere + mesajul utilizatorului; astepti "da". Fara "da", nu comiti. ``` Decizia **SVN vs git** per fisier - o da comanda, nu o alegi tu: ```powershell svn info "" *> $null if ($?) { 'SVN -> svn commit' } else { 'git -> doar fisiere care NU sunt in SVN (.gitignore etc.)' } ``` Commit (dupa "da"), tintit: ```powershell svn add # doar fisierele '?' din svn status svn commit -m "" # .prg/.md/.ps1/.sql/.scx+.sct; NU .sc2, NU tot COMUN ``` Sync, imediat dupa orice `svn commit`: ```powershell & (Join-Path $Root 'roa_sync.bat') ``` ## Reguli nenegociabile - **SVN = sursa de adevar.** Fisierele sursa (`.prg .md .ps1 .sql .bat AGENTS.md .vcx/.scx .vc2/.sc2`) sunt SVN-tracked -> `svn commit`, niciodata `git commit`. - **`git pull` in COMUN = interzis** (aduce textele fara binare). In loc: `roa_sync.bat`. - **Pe `main` din COMUN scrie doar `roa_sync`.** Si in repo-ul proiectului, munca merge prin SVN, nu direct in git. - **`roa_sync.bat` doar in doua momente**: la intrarea in proiect si imediat dupa `svn commit`. Nu pe tree murdar, nu in mijlocul lucrului. - **`.vc2/.sc2` editat -> `txt2vcx.ps1` INAINTE de commit** (write-back pe binar; skill `roa-vfp-text-edit`). Text fara write-back = modificarea nu exista. ## Cazuri - **Branch in repo-ul proiectului**: liber. In COMUN: `claude/`, niciodata pe `main`. - **Branch COMUN terminat**: fara merge; dupa `svn commit` continutul intra pe `main` ca `sync SVN rN`, branch-ul se sterge (doar daca `git diff main..branch` e gol). - **`svn update` a dat conflict**: opreste-te si raporteaza (binarele nu se rezolva manual). - **Dupa `svn update`, git arata fisiere modificate**: e oglinda ramasa in urma; le ia `roa_sync`, nu le comiti de mana. ## Repararea unui commit non-sync (ex. `AGENTS.md` comis cu `git commit`) `AGENTS.md` e SVN-tracked; comis cu `git commit` devine commit "non-sync" (nu l-a produs `roa_sync`) si SVN ramane in urma -> alt calculator nu-l primeste prin `svn update`. ```powershell git -C "$Root" reset # sterge commit-ul non-sync (local) git -C "$Root" push --force origin main # doar daca era deja impins svn commit "$Root\AGENTS.md" -m "" # il duci in SVN, unde trebuia & (Join-Path $Root 'roa_sync.bat') ``` ## Dovada (fara ea nu raportezi "gata") ```powershell svn status "$Root" # curat pe fisierele tintite git -C "$Root" log --oneline -3 # ultimul commit = 'sync SVN rN' ``` ## Scripturi - `roa_sync.bat` (radacina proiectului) + `COMUN\scripts\roa_sync.ps1` (`-ProjectRoot `, `-GitOnly` sare peste SVN si regenerarea textelor). - `COMUN\utile\leaga_skills.ps1` / `scrie_backstop_skills.ps1` - expunere skill-uri (skill `roa-onboarding`). ## Referinta (doar la nevoie) - `COMUN\docs\fluxul_svn_git.md` (cazuri, interdictii).