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

4.3 KiB

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)

# 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:

svn info "<cale_fisier>" *> $null
if ($?) { 'SVN -> svn commit' } else { 'git -> doar fisiere care NU sunt in SVN (.gitignore etc.)' }

Commit (dupa "da"), tintit:

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:

& (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.

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")

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).