Files
comun/docs/onboarding/inrolare-calculator-nou.md
2026-08-24 16:38:08 +03:00

142 lines
5.6 KiB
Markdown

# Înrolarea unui calculator nou pentru programare ROA
Scop: un calculator nou care are (sau va avea) working copy SVN pentru unul sau mai multe
proiecte ROA, dar nu are încă acces SSH la gitea, nu are utilitarul `foxbin2prg`, și nu are
clonele git ale proiectelor. Diferă de `inrolare-proiect-git-text.md` (acela e pentru
înrolarea unui PROIECT NOU în fluxul git-text, prima dată, când repo-ul gitea încă nu există).
Aici repo-urile gitea EXISTĂ deja (roacont, comun, foxbin2prg etc.) și trebuie doar clonate
pe mașina nouă.
## Reguli
- PowerShell exclusiv — `bash.exe` crapă pe mașinile astea și lasă stackdump-uri
(vezi `COMUN\docs\bash.exe.stackdump`).
- Niciun `svn commit`, nicio modificare de binare VFP în acest flux.
- Nu forța (`--force`, `reset --hard`) fără să arăți întâi ce s-ar pierde.
## Precondiții pe calculatorul nou
- VFP9 IDE instalat (pentru `.frx`/`.mnx`/`.lbx`/`.pjx`/`.dbc`, care nu au write-back text).
- Client SVN (linie de comandă `svn` sau TortoiseSVN) spre `http://svnroa:3001/svn/ROA`.
- Git for Windows instalat (aduce și `git`, `ssh`, `ssh-keygen` în PATH).
- PowerShell 5.1+ (vine cu Windows).
## Pasul 1 — cheie SSH pentru Gitea
Generare (ed25519):
```powershell
ssh-keygen -t ed25519 -C "<utilizator>@<nume-calculator>"
# accepta locatia implicita: C:\Users\<user>\.ssh\id_ed25519
# passphrase optional, dar recomandat
```
Pornește agentul și adaugă cheia:
```powershell
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add "$env:USERPROFILE\.ssh\id_ed25519"
```
Copiază cheia publică:
```powershell
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | Set-Clipboard
```
Înregistreaz-o în Gitea: profil → Settings → SSH / GPG Keys → Add Key → lipește conținutul,
dă-i un nume care identifică mașina (ex. `laptop-marius-birou2`).
Verificare:
```powershell
ssh -T git@gitea.romfast.ro
```
Trebuie să răspundă cu autentificare reușită (nu "Permission denied").
### Config SSH (host, IP, port)
Gitea nu răspunde pe portul SSH implicit (22), ci pe **222**, și rezolvarea DNS a
`gitea.romfast.ro` poate lipsi pe mașina nouă — de-asta adaugă explicit un `Host` în
`C:\Users\<user>\.ssh\config` (creează fișierul dacă nu există):
```
Host gitea.romfast.ro
HostName 10.0.20.165
User git
Port 222
```
Fără asta, `ssh -T git@gitea.romfast.ro` sau `git clone`/`git fetch` pot eșua cu
"Connection refused" sau "Could not resolve hostname", chiar dacă cheia SSH e corect
înregistrată în Gitea.
## Pasul 2 — SVN global-ignores
În `%APPDATA%\Subversion\config`, secțiunea `[miscellany]`, adaugă (pe lângă ce există deja):
```
global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__
*.rej *~ #*# .#* .*.swp .DS_Store [Tt]humbs.db
*.vc2 *.sc2 *.fr2 *.mn2 *.lb2 *.pj2 *.dc2 *.db2 *.dbf.cfg
```
Fără asta, versiunile text FoxBin2Prg apar ca `?` în `svn status` și riscă `svn add` accidental.
Verificare: `svn status D:\ROA\<proiect>` nu mai arată `.vc2`/`.sc2`/... ca necunoscute.
## Pasul 3 — utilitarul foxbin2prg
```powershell
git clone git@gitea.romfast.ro:romfast/foxbin2prg.git D:\ROA\UTIL\foxbin2prg
cd D:\ROA\UTIL\foxbin2prg
git checkout romfast # daca nu e deja branch-ul implicit dupa clone
```
Verificare: `git remote -v` arată originul de mai sus (nu upstream-ul github
`fdbozzo/foxbin2prg`); `git log --oneline -3` arată istoricul fork-ului romfast.
## Pasul 4 — clonarea proiectelor existente (per proiect ROA)
Presupune că working copy SVN există deja la `D:\ROA\<PROIECT>` (dacă nu, `svn checkout` întâi).
Pentru fiecare proiect deja înrolat (vezi lista din `inrolare-proiect-git-text.md`: ROACONT,
ROAGEST, ROAAUTO, ROAIMOB, ROAACNPRO, ROAFACTURARE):
```powershell
cd D:\ROA\<PROIECT>
git init
git remote add origin git@gitea.romfast.ro:romfast/<proiect-lowercase>.git
git fetch origin
git checkout -b main --track origin/main
```
Dacă `checkout -b` refuză pentru că fișiere locale (venite din SVN) ar fi suprascrise,
OPREȘTE-TE și arată lista exactă de conflicte — nu forța cu `reset --hard` fără să confirmi cu
utilizatorul că diferențele nu sunt de fapt lucru necomis.
## Pasul 5 — COMUN (repo separat, în fiecare proiect)
`COMUN\` din interiorul fiecărui proiect e alt repo git, comun tuturor produselor:
```powershell
cd D:\ROA\<PROIECT>\COMUN
git init
git remote add origin git@gitea.romfast.ro:romfast/comun.git
git fetch origin
git checkout -b main --track origin/main
```
(Aceleași precauții ca la pasul 4 dacă apar conflicte de checkout.)
## Pasul 6 — sincronizare inițială text FoxBin2Prg
```powershell
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\<PROIECT>
```
Regenerează `.??2` peste starea curentă a binarelor SVN de pe mașina asta. Rulează-l la
începutul fiecărei sesiuni de lucru și înainte de orice commit (vezi `roa_sync.bat` din
rădăcina proiectului, dacă există, care automatizează svn update → git_sync → commit sync).
## Pasul 7 — verificare finală
- `git -C D:\ROA\<PROIECT> status` și `git -C D:\ROA\<PROIECT>\COMUN status`: curat sau doar
diferențe așteptate față de ultimul "sync SVN" (dacă SVN local e pe altă revizie).
- `ssh -T git@gitea.romfast.ro` încă reușește.
- Nu comite nimic din acest flux fără să arăți diff-ul utilizatorului.
## Referințe
- `inrolare-proiect-git-text.md` — înrolarea unui proiect NOU (repo gitea inexistent) în flux.
- `../fluxul_svn_git.md` — modelul de branch-uri main/claude și igiena git.
- `../flux-editare-vfp-text.md` — editarea text `.vc2`/`.sc2` + write-back.