From b0460462515e3be248f5c352e181a4c1b49290f9 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Thu, 20 Aug 2026 17:36:06 +0300 Subject: [PATCH] sync SVN r18021 --- docs/fluxul_svn_git.md | 112 ++++++++++++++++++++++++++++------------- 1 file changed, 77 insertions(+), 35 deletions(-) diff --git a/docs/fluxul_svn_git.md b/docs/fluxul_svn_git.md index d95be85..b6ff114 100644 --- a/docs/fluxul_svn_git.md +++ b/docs/fluxul_svn_git.md @@ -1,46 +1,88 @@ -# Flux SVN + git pentru COMUN +# COMUN: flux SVN + git -**SVN = șeful** (munca reală circulă prin el). **git = oglindă** pentru unelte (Claude, căutare). -git primește de la SVN, niciodată invers. +SVN = sursa de adevăr. git = oglindă. Pe `main` din COMUN scrie **doar** `roa_sync`. -## Reguli +De ce: `COMUN` e același repo git ținut în 8 copii, câte una per proiect. `main` are un singur +furnizor — SVN, prin `roa_sync`. Conținut intrat pe altă ușă revine oricum ca `sync SVN rN` după +`svn commit`: același conținut, alt SHA, conflict. -1. **Munca reală se comite DOAR în SVN.** Nu face `git commit` cu o modificare noua care n-a - trecut prin SVN. -2. **git se împrospătează DIN svn**, într-o singură direcție. -3. **COMUN se publică pe git dintr-UN SINGUR folder** (publisher, ex. `ROAAUTO\COMUN`). Celelalte - doar se aliniază la origin. +## Utilizatorul doar aprobă -## Lucrat în paralel în 2 proiecte (ex. roagest + roaauto), fișiere diferite +Comenzile le rulezi **tu**: `roa_sync.bat`, `svn commit`, `roa_sync.bat`. El nu ține minte niciun +pas și nu tastează nimic — dar **nimic nu se comite fără un „da" explicit de la el.** -1. **Împaci în SVN**: `svn commit` in ROAGEST\COMUN -> `svn update` in ROAAUTO\COMUN (aduce - fisierele din roagest, fara conflict pe fisiere diferite) -> `svn commit` acolo -> `svn update` - inapoi in ROAGEST\COMUN. Acum ambele copii SVN au tot — e sursa de adevăr. -2. **Oglindești în git, doar din folderul publisher**: `git add -A` + `git commit` + `git push` - in ROAAUTO\COMUN. -3. **Celălalt folder: aliniere, NU commit** — in ROAGEST\COMUN: `git fetch origin` + - `git reset --hard origin/main`. Sigur: fișierele sunt deja identice cu origin (le-a făcut svn), - `reset` doar mută pointerul. +Deci: nu te opri tăcut după ce livrezi diff-ul. **Întreabă**, cu fișierele și mesajul propuse. -Când te muți dintr-un proiect în altul: `svn update` in proiectul unde intri, apoi -`git reset --hard origin/main` in COMUN, ca git-ul sa fie curat. +## Flux -## Regula care rezumă tot +``` + .prg / .md / .ps1 / .sql .vc2 / .sc2 + │ │ + │ txt2vcx.ps1 <- IMEDIAT + │ │ + │ verifica pe BINAR + └────────────────┬────────────────┘ + │ + antet la zi + test rulat + │ + diff ca fisier in docs\ + │ + INTREBI: fisiere + mesaj --> "da" ? --no--> stop + │ da + svn commit TINTIT (.prg | .scx + .sct -- niciodata .sc2) + │ + roa_sync.bat --> main: sync SVN rN +``` -> Un singur folder publică în git (commit+push). Celelalte doar `git reset --hard origin/main`. -> Munca circulă prin SVN; git fotografiază rezultatul. +## Cazuri -## Model de branching (git urmareste text .??2) +**Intri în proiect** → rulezi `roa_sync.bat`, fără să întrebi, dacă `svn status` și `git status` +sunt curate. Dacă nu sunt, întrebi întâi — pot fi modificări nefinalizate ale altcuiva. -git urmareste versiunile text FoxBin2Prg (.vc2/.sc2/…), improspatate in-arbore cu `git_sync.ps1` -la inceput de sesiune si inainte de orice commit; nu comite cat timp `git_sync` raporteaza esecuri -(exit nenul). Doua benzi: +**Ai editat `.prg` / `.md` / `.ps1` / `.sql`** → antetul la zi, testul rulat, diff-ul ca fișier în +`docs\`. -- **`main` = oglinda SVN**: primeste DOAR commit-uri `sync SVN rN`, facute din stare curata - (imediat dupa `svn update`, inainte de lucru local). -- **Claude lucreaza pe branch** `claude/` si comite doar acolo; - `git diff main..claude/` arata exact si numai munca lui. -- Dupa ce modificarile intra in SVN (`svn commit` facut de utilizator), branch-ul se inchide - (merge in `main` la urmatorul sync sau stergere). -- Igiena: sync pe `main` doar din stare curata — `svn update` in mijlocul lucrului amesteca - binarele pe disc. +**Ai editat `.vc2` / `.sc2`** → `txt2vcx.ps1` **imediat**, apoi verifici pe binar (reconvertești +binarul într-un cache temporar și compari cu textul din arbore; mtime nu dovedește nimic). Text fără +write-back = modificarea nu există. Abia apoi antet / test / diff. + +**Vrei să-ți ții munca în git** → branch. În repo-ul proiectului: liber. În `COMUN`: +`claude/`, commit **doar** acolo, niciodată pe `main`. + +**Ai terminat branch-ul** → în repo-ul proiectului: merge în `main`, normal. În `COMUN`: **nu face +merge**. După `svn commit`, conținutul ajunge pe `main` ca `sync SVN rN`; branch-ul se șterge. + +**Vrei `svn update`** → doar din stare curată. Niciodată în mijlocul lucrului: aduce binare noi peste +ce ai pe disc. Dacă ai text `.??2` editat fără write-back, fă întâi write-back-ul. + +**`svn update` a dat conflict** → oprește-te și raportează. Binarele nu se rezolvă manual. + +**După `svn update`, git arată fișiere modificate** → e oglinda rămasă în urmă, nu munca ta. +Nu le comite de mână; le ia `roa_sync` într-un `sync SVN rN`. + +**Diff-ul e gata** → ceri aprobarea, explicit și complet: lista fișierelor de comis și mesajul +propus. Nu presupune „da" din tăcere și nu amâna întrebarea pentru „mai târziu" — el nu ține minte +pasul, tu îl ții. + +**A zis „da"** → rulezi tu `svn commit` **țintit**, doar fișierele aprobate — pe binar +(`.scx` + `.sct`), nu pe `.sc2`. Niciodată pe tot `COMUN`: intră zgomotul de compilare VFP. +Imediat după, rulezi `roa_sync.bat`. Raportezi revizia SVN și ce a intrat pe `main`. + +**A zis „nu" sau a cerut modificări** → nu comiți, nu insiști, nu rulezi `roa_sync`. Lucrarea rămâne +necomisă pe disc și o raportezi ca atare la predarea contextului. + +**Predai contextul** → raportează explicit dacă ai lăsat text `.??2` editat fără write-back. E stare +periculoasă. + +## Interzis + +- `git commit` / `git push` / `git merge` pe `main` în `COMUN` +- copierea unui fișier dintr-o copie de `COMUN` în alta — `svn update` îl duce; copierea = intrare dublă +- write-back pe `.fr2` / `.mn2` / `.lb2` / `.pj2` — nu e suportat; acolo textul se citește, modificarea se face în IDE + +## Copii rămase în urmă + +Nimic nu se sincronizează în fundal. O copie neatinsă de luni se aliniază singură la primul +`roa_sync.bat` rulat de acolo: `svn update` → regenerare text → `sync SVN rN` → fetch → ff sau +`rebase --empty=drop`, care aruncă automat sync-urile al căror conținut e deja pe origin. De aceea +regula veche „un singur folder publisher" e retrasă: numărul de copii nu mai contează.