7.1 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.execrapă pe mașinile astea și lasă stackdump-uri (veziCOMUN\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ă
svnsau TortoiseSVN) sprehttp://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șigit -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.
Pasul 8 — skill-uri de agent ROA (COMUN\skills)
- Skill-urile sunt fișiere versionate în
comun.git, subCOMUN\skills\; ajung pe mașină cugit pull(sauroa_sync.bat) înCOMUN\. - Expunere pe mașină (o dată):
powershell -ExecutionPolicy Bypass -File D:\ROA\<PROIECT>\COMUN\utile\leaga_skills.ps1(rulează întâi cu-DryRun). Creează symlink-uri în%USERPROFILE%\.claude\skills\cătreCOMUN\skills\<nume>— fără copiere, deci aceleași fișiere sunt văzute și de Claude Code, și de opencode. Idempotent; dacă un director real cu același nume există, nu îl șterge. - Backstop de rutare per proiect:
...\scrie_backstop_skills.ps1 -Root D:\ROA -Proiecte <numele proiectelor>(fără-Proiecte= toate proiectele detectate;-DryRunîntâi). Scrie/actualizeazăAGENTS.mdși un bloc marcat între<!-- roa-skills:start -->și<!-- roa-skills:end -->înCLAUDE.md. Idempotent. - Actualizare: după orice
git pull/roa_syncînCOMUN\sau după modificarea skill-urilor, re-rulează cele două scripturi (sunt idempotente). NU copia manual fișiere de skill — se pierde legătura cu sursa. - Adăugarea unui skill nou: creezi
COMUN\skills\<nume>\SKILL.md, adaugi o linie înCOMUN\utile\backstop_skills.txtși înreguli_lucru.mdpct. 7, apoi ruleziscrie_backstop_skills.ps1. - Aceste scripturi nu ating SVN și nu modifică binare VFP.
Referințe
../cercetare/rec_skills.md— decizia și inventarul skill-urilor de agent.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.