2013-03-24 11 views
7

Esecuzione git fsck sul mio repo, ottengo questo output:Devo preoccuparsi di avvertimento `git fsck`: "contiene le modalità di file zeri"

$ git fsck 
Checking object directories: 100% (256/256), done. 
warning in tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4: contains zero-padded file modes 
warning in tree 7cac28aefa67ff63e5ca163de382a3e08b8a7ba5: contains zero-padded file modes 
warning in tree c24803abe783decd96c1dbf05d3ac45dbf3ff372: contains zero-padded file modes 
warning in tree 51393697adb908ddb5fac540a86ea5a331fc1da5: contains zero-padded file modes 
Checking objects: 100% (40275/40275), done. 

dovrei essere preoccupato per questi avvertimenti? Possono danneggiare il mio repo?

risposta

4

Non exatly pausa il repo, ma si tratta di sospetti. Il test per le modalità di file zero imbottiti entrò nel lontano 2005:

commit 64071805eda2b57d2b77943bb3f9865d90562ecf 
Author: Linus Torvalds <[email protected]> 
Date: Wed Jul 27 16:08:43 2005 -0700 

    git-fsck-cache: be stricter about "tree" objects 

    In particular, warn about things like zero-padding of the mode bits, 
    which is a big no-no, since it makes otherwise identical trees have 
    different representations (and thus different SHA1 numbers). 

    Also make the warnings more regular. 

    Signed-off-by: Linus Torvalds <[email protected]> 

I diversi valori SHA1 faranno git credere che "Un albero" è diverso da "albero B" anche quando sono gli stessi in tutti i modi più importanti (stessi file e modalità tranne gli zero iniziali in uno), che renderà il repository leggermente più grande del necessario. Inoltre, due commit effettivamente identici (ad es. Creati riproducendo una patch) sembrano diversi. Non so nulla di ciò che avrà un errore, ma potrebbe confondere varie operazioni ("si aspettano" di trovare differenze, ma poi non ne troverà) e nel tempo potrebbe gonfiare il repository .

Due domande aggiuntive interessanti: (1) Come si può risolvere questo? Ho il sospetto che l'uso di git filter-branch possa risolverlo (ripetendo i commit per ottenere oggetti di albero "corretti"), ma dovresti capire quale branch (es) contiene i commit che contengono quegli alberi, e anche dover eliminare i "cattivi" si impegna riferendosi agli oggetti dell'albero cattivo. (E naturalmente questo causerà ogni sorta di dolore per chiunque abbia clonato il repository.) (2) Come è nato questo in primo luogo?

Sarebbe interessante vedere quali sono le stampe git cat-file per questi alberi, sebbene git cat-file -p aggiunga zeri iniziali, quindi è una specie di dolore. (git cat-file tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4 esegue il dump del contenuto non elaborato, ma sono pieni di bit binari. È possibile visualizzare solo le informazioni necessarie.)

+0

Grazie per l'informazione. 'git filter-branch' è troppo pericoloso da usare. Mi piacerebbe avere una soluzione che non pregiudichi la mia capacità di spingere/tirare da telecomandi. Spero che tale soluzione esista. –