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

5.6 KiB

Î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):

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:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add "$env:USERPROFILE\.ssh\id_ed25519"

Copiază cheia publică:

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:

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

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):

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:

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 -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.