4.3 KiB
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.
Repararea unui commit non-sync (ex.
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, niciodatagit commit. git pullin COMUN = interzis (aduce textele fara binare). In loc:roa_sync.bat.- Pe
maindin COMUN scrie doarroa_sync. Si in repo-ul proiectului, munca merge prin SVN, nu direct in git. roa_sync.batdoar in doua momente: la intrarea in proiect si imediat dupasvn commit. Nu pe tree murdar, nu in mijlocul lucrului..vc2/.sc2editat ->txt2vcx.ps1INAINTE de commit (write-back pe binar; skillroa-vfp-text-edit). Text fara write-back = modificarea nu exista.
Cazuri
- Branch in repo-ul proiectului: liber. In COMUN:
claude/<subiect>, niciodata pemain. - Branch COMUN terminat: fara merge; dupa
svn commitcontinutul intra pemaincasync SVN rN, branch-ul se sterge (doar dacagit diff main..branche gol). svn updatea dat conflict: opreste-te si raporteaza (binarele nu se rezolva manual).- Dupa
svn update, git arata fisiere modificate: e oglinda ramasa in urma; le iaroa_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>,-GitOnlysare peste SVN si regenerarea textelor).COMUN\utile\leaga_skills.ps1/scrie_backstop_skills.ps1- expunere skill-uri (skillroa-onboarding).
Referinta (doar la nevoie)
COMUN\docs\fluxul_svn_git.md(cazuri, interdictii).