Files
2026-09-17 19:20:19 +03:00

95 lines
4.3 KiB
Markdown

---
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 "<cale_fisier>" *> $null
if ($?) { 'SVN -> svn commit' } else { 'git -> doar fisiere care NU sunt in SVN (.gitignore etc.)' }
```
Commit (dupa "da"), tintit:
```powershell
svn add <fisier-nou> # doar fisierele '?' din svn status
svn commit <fisier1> <fisier2> -m "<mesaj>" # .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/<subiect>`, 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 <ultim_sync> # sterge commit-ul non-sync (local)
git -C "$Root" push --force origin main # doar daca era deja impins
svn commit "$Root\AGENTS.md" -m "<mesaj>" # 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 <root>`,
`-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).