95 lines
4.3 KiB
Markdown
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).
|