# Î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 "@" # accepta locatia implicita: C:\Users\\.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"). ## 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\` 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\` (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\ git init git remote add origin git@gitea.romfast.ro:romfast/.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\\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\ ``` 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\ status` și `git -C D:\ROA\\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.