Qual è la codifica usata nelle patch binarie di Git?

-1

Git può generare patch / diff per file binari e file di testo.

Sto cercando di capire quale codifica utilizza per le sue patch binarie.

Ecco un esempio :

diff --git a/www/images/openconnect.png b/www/images/openconnect.png
new file mode 100644
index 0000000000000000000000000000000000000000..51a5d620083cafdc8be07fc42db44ee4a273cacc
GIT binary patch
literal 55947
zcmdRWhd<R{{QouL+Lx^CE7^o(&x'1mLiWne-g{(SE4%EOaTT&R8Ie)46SA_pbc?KP
zzUO|vkMHk)_}#}t>6X0T@AEpZ*K-|lT94EzNSR0>5D3M64OJZo1TO'A$Uup}J5o}F
zs^B+5FT{OaD0l@!ZDPTnN!&GzydV&wVcZAa(v9vV@a7F~HAC+wZg$>&mY%i{KR-WV
...
zM_(nPM^0iqGn&ziW^}xgq{7*>(Z~zK&uB(7n$e8P)2d=17EN{7l9w}@(Trv^qY==m
zVj$pbc}Z>Q83UQojAk^WG1F>eAQJOc8zsxw&S*w6n$e8P)3L}vzB|q+oEgn%Ml+fb
z)3L}vX6CCI&1gn5ngGoh$c$z*qZ!R;AX+sH#8%$gAZR*cATyfLjAk?eS~Uy=GVLP*
l@a=IAWJWWZ(TrvU{C~H_V_Z$W5taY|002ovPDHLkV1k~|z(xQ7

literal 0
HcmV?d00001

Questo è chiaramente un tipo di codifica binaria-ASCII ... ma non è il comune Base64. Sembra che usi più caratteri ASCII ... e tutte le righe codificate (eccetto l'ultima !?) iniziano con z .

    
posta Dan Lenski 20.04.2017 - 04:00
fonte

1 risposta

5

Aha, è RFC1924 versione di codifica base85 , che utilizza 5 caratteri ASCII per rappresentare 4 byte (80% di efficienza):

static const char en85[] = {
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
    'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
    'U', 'V', 'W', 'X', 'Y', 'Z',
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
    'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
    'u', 'v', 'w', 'x', 'y', 'z',
    '!', '#', '$', '%', '&', '(', ')', '*', '+', '-',
    ';', '<', '=', '>', '?', '@', '^', '_', ''', '{',
    '|', '}', '~'
};

L'ulteriore ruga è che Git esegue il prefisso di ogni riga con una singola lettera ( [A-Za-z] ) per indicare 1-52 byte codificati su quella riga.

Codice sorgente: link

Annuncio di questa funzione nella mailing list di Git: link

    
risposta data 20.04.2017 - 04:39
fonte

Leggi altre domande sui tag