Formato di file amichevole, solo accenno al controllo della versione: "binario" o "testo"?

0

Sto progettando un file in formato append-only ("journaled"), e mi piacerebbe che fosse amichevole verso l'archiviazione in VCS (git / Mercurial / ...).

Da un lato, mi piacerebbe che dopo ogni modifica, solo il delta (differenza) dallo stato del file precedente fosse stato aggiunto al repository (ad esempio alcuni byte finali), non l'intero contenuto del file. Quindi, per questo, sto considerando di creare il formato "pseudo-testo", cioè non un byte NUL (0x00) nei contenuti (o forse anche qualche sottoinsieme più severo di UTF-8), per renderlo facilmente diffondibile da git / Mercurial.

D'altra parte, il formato di file "pseudo-testo" non sarebbe predisposto alla fusione, sarebbe totalmente paralizzato il contenuto. Quindi, per evitare questa possibilità, sono propenso a renderlo "binario", anche se solo mettendo un byte NUL all'offset 0 nel file. Ma poi, fondersi anche per il "testo", ma i formati di file strutturati non sono sempre realmente possibili, anche per casi "tipici" come il codice sorgente, quindi forse non c'è bisogno di preoccuparsi qui? Sono abbastanza sicuro che ci saranno totalmente conflitti dappertutto se qualcuno cerca di unire questi file, quindi potrebbe essere sufficiente un segnale di avvertimento.

Hai avuto esperienze con scelte simili in passato? Quale scelta dovrei prendere e perché?

    
posta akavel 26.07.2013 - 10:02
fonte

1 risposta

2

Non so mercurial, ma git memorizza sempre inizialmente l'intero contenuto e durante l'operazione repack (parte dell'operazione gc , per impostazione predefinita viene eseguita automaticamente quando ci sono troppi oggetti "loose") delta binario . In git questi potrebbero essere contro la versione precedente rispetto a quella precedente, ma nel tuo caso quelli precedenti saranno più piccoli quindi git li sceglierà. Sia la copia completa iniziale che il delta vengono memorizzati sgonfiati.

Quindi la scelta tra testo e binario ha un effetto trascurabile sulle dimensioni dello spazio di archiviazione.

Il grande vantaggio del file di testo è che puoi eseguire il debug con un semplice visualizzatore di testo e il diff mostrerà informazioni ragionevoli. L'unione causerà sempre un conflitto, perché tutte le modifiche sono sempre alla fine. Che sia risolvibile e risolvibile, dipende dal formato e dalle dipendenze effettivi tra le voci in esso contenute, ma avrai sempre il controllo su ciò.

Nota comunque che puoi far funzionare le diff anche con il formato binario, perché in git puoi specificare un programma diff personalizzato per file specifici (tramite gitattributes).

    
risposta data 26.07.2013 - 10:24
fonte

Leggi altre domande sui tag