6.3 KiB
COMUN: flux SVN + git
SVN = sursa de adevăr. git = oglindă. Pe main din COMUN scrie doar roa_sync.
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.
Utilizatorul doar aprobă
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.
Deci: nu te opri tăcut după ce livrezi diff-ul. Întreabă, cu fișierele și mesajul propuse.
Flux
.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
Cazuri
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.
Ai editat .prg / .md / .ps1 / .sql → antetul la zi, testul rulat, diff-ul ca fișier în
docs\.
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/<subiect>, 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.
Ești pe branch în COMUN și te bate gândul la roa_sync → nu. roa_sync se rulează în
exact două momente: la intrarea în proiect și imediat după svn commit. Ce te încurcă e
svn update de la pasul 1, nu git-ul:
- branch cu modificări necomise →
svn updaterulează necondiționat și aduce fișierele altor proiecte peste ce ai pe disc; la binare dă conflict șiroa_syncse oprește cu eroare. Git, în schimb, e cuminte: vede tree murdar pe branch și sare peste, nu-ți atinge branch-ul. - branch cu tree curat →
roa_syncfacecheckout mainfără să întrebe. Textele de pe disc revin lamain, binarele nu (git nu le urmărește) → rămâi cu text de pemainpeste binare de pe branch. Munca e în commit, dar nu mai e pe disc, iar VFP ar compila altceva. - curățenia de la pasul 5 șterge doar branch-urile
claude/*al cărorgit diff main..branche gol, adică cele a căror muncă a intrat deja prin SVN. Ce n-a intrat rămâne, raportat „activ".
Dacă chiar trebuie să aduci ceva de la alții în mijlocul lucrului: termină write-back-ul, dă
svn commit dacă lucrarea e gata, și abia apoi roa_sync.
Vrei să aduci ce au făcut alții → roa_sync.bat. Niciodată git pull: git poartă doar
textele, nu și binarele. Un pull ți-ar da .sc2-ul nou peste un .scx/.sct vechi — VFP compilează
binarul, deci modificarea n-ar exista în aplicație, iar următorul git_sync ar regenera textul din
binarul vechi și ar șterge-o. În plus, fișierele scrise de git peste un working copy rămas la o
revizie veche apar în svn status ca și cum ar fi munca ta. roa_sync face ordinea corectă:
svn update (binare + surse) → regenerare text → git prin fast-forward.
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 mergepemainînCOMUNgit pullînCOMUN— aduce textele fără binare; se foloseșteroa_sync.bat- 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ă.