7.8 KiB
Commit si sincronizare in COMUN (SVN + git)
SVN = sursa de adevar. git = oglinda. Pe main din COMUN scrie doar roa_sync. Comenzile le
rulezi tu; utilizatorul doar aproba - dar nimic nu se comite fara un "da" explicit de la el.
SVN sau git: decizia NU se face manual
Regula de baza: in proiectul ROA si in COMUN, fisierele sursa (.prg, .md, .ps1, .sql,
.bat, AGENTS.md, .vcx/.scx, .vc2/.sc2) sunt SVN-tracked. git commit se foloseste doar
pentru fisiere care NU sunt in SVN (.gitignore, .gitattributes, fisiere generate). Nu ghici -
verifici inainte de orice commit, cu o singura comanda:
svn info "<cale_fisier>" >$null 2>&1
if ($?) { 'SVN -> svn commit' } else { 'git -> git commit' }
Decizia pe svn status <cale>:
M/A/D-> SVN ->svn commit(niciodatagit commit).?(neversionat) -> daca e sursa care trebuie sa circule la clienti ->svn addapoisvn commit; daca e local/transient (handoff, plan,.patch,.gitignore) -> NU se comite.
Ce e de comis, descoperit cu comenzi (nu din memorie):
svn status <proiect_sau_COMUN> # M/A/D = de comis in SVN; ? = neversionat
git -C <repo> status --short # doar oglinda; nu comiti aici fisierele SVN-tracked
Cazul care a muscat: AGENTS.md e SVN-tracked (svn/ROA/ROAFACTURARE/Trunk/AGENTS.md). Comis cu
git commit, creeaza un commit "non-sync" (nu l-a produs roa_sync) si lasa SVN-ul in urma ->
alt calculator nu primeste schimbarea prin svn update. Se repara: git reset <ultim_sync> +
svn commit AGENTS.md + roa_sync.bat + git push --force (doar daca commit-ul non-sync era deja
impins).
Cand se foloseste
- "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 am conflicte";
- intrarea intr-o sesiune de lucru in proiect (sync de inceput).
Nu se aplica altui repo decat COMUN + proiectul care il contine. Pentru editarea codului VFP
(.vcx/.scx prin .vc2/.sc2) vezi skill-ul roa-vfp-text-edit.
Pasi
Arbore de decizie - opreste-te la primul caz care se potriveste.
-
Intri in proiect -> rulezi
roa_sync.bat, fara sa intrebi, DOAR dacasvn statussigit statussunt curate. Daca nu sunt, intrebi intai (pot fi modificari nefinalizate ale altcuiva). -
Ai editat
.prg/.md/.ps1/.sql(proiect sau COMUN) -> antetul la zi, testul rulat, diff-ul scris ca fisier indocs\. -
Ai editat
.vc2/.sc2->txt2vcx.ps1IMEDIAT, apoi verifici pe binar (reconversie intr-un cache temporar + comparatie; mtime nu dovedeste nimic). Text fara write-back = modificarea nu exista. Abia apoi antet / test / diff. -
Ceri aprobarea, explicit si complet: lista fisierelor de comis + mesajul propus. Nu presupune "da" din tacere si nu amana pentru "mai tarziu" - el nu tine minte pasul, tu il tii.
-
A zis "da" -> rulezi tu
svn committintit, doar fisierele aprobate, cu comenzile exacte (nu le alegi tu - le rulezi asa):# fisiere noi -> intai svn add svn add <fisier1> <fisier2> # commit tintit: .prg / .md / .ps1 / .sql / .scx + .sct - niciodata .sc2, niciodata tot COMUN svn commit <fisier1> <fisier2> -m "<mesaj>" -
Imediat dupa ->
roa_sync.bat. Raportezi revizia SVN si ce a intrat pemain. -
A zis "nu" / cere modificari -> nu comiti, nu insisti, nu rulezi
roa_sync. Lucrarea ramane necomisa pe disc si o raportezi asa la predarea contextului.
Cazuri
- Vrei sa-ti tii munca in git -> branch. In repo-ul proiectului: liber. In COMUN:
claude/<subiect>, commit doar acolo, niciodata pemain. - Ai terminat branch-ul -> proiect: merge in
main, normal. COMUN: fara merge; dupasvn commitcontinutul ajunge pemaincasync SVN rN, iar branch-ul se sterge (doar dacagit diff main..branche gol). - Esti pe branch in COMUN si te bate gandul la
roa_sync-> nu.roa_syncse ruleaza in exact doua momente: la intrarea in proiect si imediat dupasvn commit. Pe branch cu tree curat facecheckout mainfara sa intrebe (binarele raman de pe branch); pe branch murdar sare peste, darsvn updatede la pasul 1 ruleaza oricum si poate aduce binare peste ce ai pe disc. - Vrei
svn update-> doar din stare curata, niciodata in mijlocul lucrului. Daca ai text.??2editat fara write-back, fa intai write-back-ul. svn updatea dat conflict -> opreste-te si raporteaza; binarele nu se rezolva manual.- Dupa
svn updategit arata fisiere modificate -> e oglinda ramasa in urma, nu munca ta; nu le comite de mana, le iaroa_syncintr-unsync SVN rN. - Vrei sa aduci ce au facut altii ->
roa_sync.bat. Niciodatagit pull: git poarta doar textele, nu binarele; un pull da.sc2nou peste.scx/.sctvechi, VFP compileaza binarul, iar urmatorulgit_syncsterge modificarea. - Copie de COMUN ramasa in urma -> se aliniaza singura la primul
roa_sync.batrulat acolo. - Predai contextul -> raporteaza explicit daca ai lasat text
.??2editat fara write-back (stare periculoasa).
Interzis
git commit/git push/git mergepemainin COMUN.git pullin COMUN - aduce textele fara binare; se folosesteroa_sync.bat.git commitpe tot COMUN sau pe.sc2- doar tintit, pe fisierele aprobate.- Copierea unui fisier dintr-o copie de COMUN in alta -
svn updateil duce; copierea = intrare dubla. - Write-back pe
.fr2/.mn2/.lb2/.pj2- nesuportat; acolo se modifica in IDE. - Commit fara un "da" explicit de la utilizator.
Criterii de acceptare si dovada
Fara dovada da/nu de mai jos, commit-ul/sincronizarea NU se raporteaza ca terminata. "Arata bine" nu e dovada.
- Inainte de commit:
git status --porcelaincontine EXACT fisierele aprobate; nimic neasteptat stagiat. - Dupa
svn commit:svn statuscurat pe fisierele tintite, iar revizia SVN este raportata. - Dupa commit:
roa_sync.bata rulat si raporteaza succes (exit 0, commitsync SVN rNpemainin COMUN, fara avertismente de conflict). git statuscurat pe fisierele tintite in COMUN; branch-urileclaude/*terminate sunt inchise, cele active raportate.- Verificarea se face inainte de
svn commit: fara "da" explicit, commit-ul nu are loc (skill-ul nu comite din proprie initiativa). - Daca utilizatorul a zis "nu": dovada e absenta oricarei urme de commit sau sync in log.
Scripturi
D:\ROA\ROAFACTURARE\roa_sync.bat(sauroa_sync.batdin radacina proiectului).D:\ROA\ROAFACTURARE\COMUN\scripts\roa_sync.ps1--ProjectRoot <root>, iar-GitOnlysare peste SVN si regenerarea textelor.D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1sigit_sync.ps1- doar daca ai atins binare.
Referinta (doar la nevoie)
- Doar daca ai nevoie de contextul complet, citeste
COMUN\docs\fluxul_svn_git.md(cazuri, interdictii) pentru fluxul SVN + git.