Files
comun/docs/fluxul_svn_git.md

66 lines
2.4 KiB
Markdown

# Flux SVN + git pentru COMUN
**SVN = șeful** (munca reală circulă prin el). **git = oglindă** pentru unelte (Claude, căutare).
git primește de la SVN, niciodată invers.
## Reguli
1. **Munca reală se comite DOAR în SVN.** Nu face `git commit` cu o modificare nouă 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.
## Lucrat în paralel în 2 proiecte (ex. roagest + roaauto), fișiere diferite
### 1. Împaci în SVN
```
# ROAGEST\COMUN
svn commit -m "modificari roagest"
# ROAAUTO\COMUN
svn update # aduce fisierele din roagest (alte fisiere -> fara conflict)
svn commit -m "modificari roaauto"
# ROAGEST\COMUN
svn update # aduce fisierele din roaauto
```
Acum ambele copii SVN au tot. E sursa de adevăr.
### 2. Oglindești în git (doar din folderul publisher)
```
cd ROAAUTO\COMUN
git add -A
git commit -m "sync svn"
git push
```
### 3. Celălalt folder: aliniere, NU commit
```
cd 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
git reset --hard origin/main # in COMUN, ca git-ul sa fie curat
```
## Regula care rezumă tot
> Un singur folder publică în git (commit+push). Celelalte doar `git reset --hard origin/main`.
> Munca circulă prin SVN; git fotografiază rezultatul.
## Model de branching (git urmareste text .??2)
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:
- **`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/<subiect>` si comite doar acolo;
`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
(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.