sync SVN r18021
This commit is contained in:
@@ -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).
|
SVN = sursa de adevăr. git = oglindă. Pe `main` din COMUN scrie **doar** `roa_sync`.
|
||||||
git primește de la SVN, niciodată invers.
|
|
||||||
|
|
||||||
## 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
|
## Utilizatorul doar aprobă
|
||||||
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.
|
|
||||||
|
|
||||||
## 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
|
Deci: nu te opri tăcut după ce livrezi diff-ul. **Întreabă**, cu fișierele și mesajul propuse.
|
||||||
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.
|
|
||||||
|
|
||||||
Când te muți dintr-un proiect în altul: `svn update` in proiectul unde intri, apoi
|
## Flux
|
||||||
`git reset --hard origin/main` in COMUN, ca git-ul sa fie curat.
|
|
||||||
|
|
||||||
## 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`.
|
## Cazuri
|
||||||
> Munca circulă prin SVN; git fotografiază rezultatul.
|
|
||||||
|
|
||||||
## 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`
|
**Ai editat `.prg` / `.md` / `.ps1` / `.sql`** → antetul la zi, testul rulat, diff-ul ca fișier în
|
||||||
la inceput de sesiune si inainte de orice commit; nu comite cat timp `git_sync` raporteaza esecuri
|
`docs\`.
|
||||||
(exit nenul). Doua benzi:
|
|
||||||
|
|
||||||
- **`main` = oglinda SVN**: primeste DOAR commit-uri `sync SVN rN`, facute din stare curata
|
**Ai editat `.vc2` / `.sc2`** → `txt2vcx.ps1` **imediat**, apoi verifici pe binar (reconvertești
|
||||||
(imediat dupa `svn update`, inainte de lucru local).
|
binarul într-un cache temporar și compari cu textul din arbore; mtime nu dovedește nimic). Text fără
|
||||||
- **Claude lucreaza pe branch** `claude/<subiect>` si comite doar acolo;
|
write-back = modificarea nu există. Abia apoi antet / test / diff.
|
||||||
`git diff main..claude/<subiect>` arata exact si numai munca lui.
|
|
||||||
- Dupa ce modificarile intra in SVN (`svn commit` facut de utilizator), branch-ul se inchide
|
**Vrei să-ți ții munca în git** → branch. În repo-ul proiectului: liber. În `COMUN`:
|
||||||
(merge in `main` la urmatorul sync sau stergere).
|
`claude/<subiect>`, commit **doar** acolo, niciodată pe `main`.
|
||||||
- Igiena: sync pe `main` doar din stare curata — `svn update` in mijlocul lucrului amesteca
|
|
||||||
binarele pe disc.
|
**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ă.
|
||||||
|
|||||||
Reference in New Issue
Block a user