Se siete maintainer di repository Git particolarmente popolosi, con molti path ricorrenti nelle sotto cartelle, a cui contribuiscono parecchi sviluppatori, potreste trovare questa notizia piuttosto interessante.
Se infatti avete riscontato anomalie nell’occupazione dello spazio di repository che dovrebbero contenere solo codice, potreste stare sperimentando il problema scoperto da Derrick Stolee e raccontato da Dev Class.
In estrema sintesi il problema riguarda repository in cui ci sono parecchie sotto cartelle nelle quali i path si ripetono. In questi casi, l’algoritmo di comparazione delle differenze utilizzato da Git va in crisi, poiché si affida unicamente agli ultimi sedici caratteri del path, pertanto in circostanze simili a quelle descritte nell’articolo problemi di comparazioni errate sono molto probabili.
Ad accorgersi di tutto è stato inizialmente Jonathan Creamer, senior engineer di Microsoft, che dovendo gestire un repository contenente codice JavaScript dai numeri importanti (più di mille utenti attivi mensili e circa venti milioni di linee di codice) si è accorto di come l’operazione di clone del repository occupasse ben 178GB di spazio, decisamente più spazio di quanto atteso (stiamo comunque parlando di file di testo).
Il repository di Creamer presentava moltissimi file CHANGELOG.md che riferendosi allo stesso path (per via degli ultimi sedici caratteri utilizzati) venivano considerati lo stesso file e quindi “registrati” dal repository come cambiamenti di cui tenere traccia.
Stolee ha quindi proposto una patch risolutiva che , unita alla funzione git-repack consente di risolvere la problematica. Nel caso specifico i 178GB di spazio sono diventati 5, a dimostrazione di quanto impatto la problematica abbia nella realtà, e ci sono numerose altre segnalazioni di repository la cui occupazione si è decimata dopo l’applicazione della patch creata da Stolee.
Per una volta quindi non è di sicurezza che si parla, bensì di una problematica operativa che però potrebbe avere, su determinati repository, impatti non solo inerenti lo spazio, ma anche all’efficienza. Tutti i repository che hanno fatto emergere la problematica infatti, dopo la cura, sono tornati ad essere molto più veloci.
Cosa buona da ricordare, per quanto scontata è come questa patch, che lo ricordiamo nasce da una issue pubblicata sul repository git-for-windows, quando verrà inclusa aggiungerà la nuova PATH-WALK API, di cui beneficeranno tutti gli utilizzatori di Git.
Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.