diff --git a/docs/git-svn-crlf.md b/docs/git-svn-crlf.md index 7077520..25eb0bd 100644 --- a/docs/git-svn-crlf.md +++ b/docs/git-svn-crlf.md @@ -1,37 +1,24 @@ # Modificari fantoma git dupa svn update (CRLF) -Simptom: `git status` arata fisiere ca `modified` (de obicei `.md` in `COMUN/docs/`, -uneori `roagest.pjx`/`.PJT`) dupa un ciclu `svn update`/`svn commit`, desi `git diff` -nu arata nicio linie schimbata. +Simptom: `git status` arata fisiere `.md`/`.pjx` ca modificate dupa `svn update`, +desi continutul e identic. -Cauza: SVN scrie fisierele cu CRLF nativ pe Windows si le atinge mtime-ul la fiecare -update, chiar daca continutul nu s-a schimbat. Cu `core.autocrlf=true` (setare globala -uzuala), git recompara/converteste EOL-urile la fiecare verificare de stat, si uneori -ramane cu index-ul in stare "needs update" desi hash-ul blob-ului e identic cu HEAD -(verificabil cu `git hash-object ` vs `git ls-files -s `). +Cauza: SVN scrie CRLF nativ si atinge mtime la fiecare update; `core.autocrlf=true` +face git sa (re)verifice/converteasca EOL-urile si sa le raporteze ca dirty. -Fix aplicat (2026-07-15): `.gitattributes` cu `* -text` la radacina fiecarui repo -(`ROAGEST/.gitattributes`, `COMUN/.gitattributes`, si replicat in `ROAAUTO`, `ROACONT`) -— dezactiveaza complet normalizarea CRLF/LF facuta de git, SVN ramane singura autoritate -pentru line endings. Fix independent de `core.autocrlf` local al fiecarui calculator/user. +Fix (2026-07-15): `.gitattributes` cu `* -text` la radacina fiecarui repo (ROAGEST, +COMUN, ROAAUTO, ROACONT, ROAIMOB, ROAACNPRO) — opreste normalizarea CRLF/LF a git, +SVN ramane autoritatea EOL. Pe repo nou cu acelasi tipar svn+git, copiaza acelasi +`.gitattributes`. -Daca reapare pe un repo nou (alta aplicatie ROA cu acelasi tipar svn+git in paralel), -copiaza acelasi `.gitattributes` (`* -text`) la radacina. +Capcana: `-text` opreste doar conversia *viitoare* — blob-urile deja in git (LF) +tot difera de ce scrie SVN (CRLF), deci diferenta reala reapare o data. Fix unic: +normalizat blob-urile la CRLF (`comun.git` fc11f3e), dupa care raman stabile. -**Capcana descoperita ulterior (2026-07-15):** `* -text` opreste doar conversia -*automata* a git — nu repara divergenta deja existenta intre blob-ul din git (LF, -din commit-ul initial) si ce scrie de fapt SVN pe disc (CRLF nativ Windows). Dupa ce -`-text` a devenit activ, `git status` a inceput sa arate din nou aceleasi fisiere -`COMUN/docs/*.md` ca modificate — de data asta real (CRLF vs LF), nu doar stat-cache. -Fix: normalizat continutul din git la CRLF (ce scrie de fapt SVN), o singura data, -cu un commit pe `comun.git` (`fc11f3e`) — de acum ambele parti scriu CRLF, `-text` -le pastreaza stabile. Daca `git status` arata iar aceste fisiere modificate dupa un -svn update, verifica intai daca e doar CRLF/LF (`diff <(git show HEAD: | tr -d '\r') <(tr -d '\r' < )`) -inainte sa presupui coruptie de continut. - -Diagnostic rapid daca `git status` minte ca un fisier e curat/murdar: +Diagnostic rapid (fisier "murdar" fara motiv): ``` git hash-object -git ls-files -s # compara al doilea camp (blob sha) cu output-ul de mai sus -git update-index --refresh # sau git add daca hash-urile sunt identice +git ls-files -s # compara sha cu cel de mai sus +git update-index --refresh # sau git add daca sha-urile sunt identice +diff <(git show HEAD: | tr -d '\r') <(tr -d '\r' < ) # confirma ca e doar CRLF/LF ```