Visualizza le differenze di testo per i file binari su GitHub

Oct 11 2020

Sto cercando di utilizzare Git e GitHub per sincronizzare una serie di file di configurazione dell'app. Questi sono file XML o plist archiviati in un formato binario. Ad esempio, un file Keyboard Maestro.kmsync .

Posso aprire questi file tramite un editor di testo per vedere un formato XML.

Ma quando visualizzo queste differenze di file in una richiesta pull di GitHub, una vista di commit, ecc. Vedo un diff binario inutile senza modifiche visibili:

Visualizzazione con 0 aggiunte e 0 eliminazioni.
BIN +17 byte (100%)
File binario non mostrato.

Posso ottenere un diff basato su testo da visualizzare localmente tramite git tramite un .gitattributesfile. Tuttavia, sembra che GitHub non rispetti queste modifiche:

GitHub non usa i file .gitattributes per scegliere quali file mostrare in un diff, quindi non è possibile aggirare questo in questo modo. [fonte]

Voglio vedere le modifiche basate sul testo e le differenze di riga quando visualizzo questi file su GitHub nei miei commit e richieste pull.

Ad esempio, il GitHub PR qui. Sentiti libero di fare il fork e sperimentare:
https://github.com/pkamb/so/pull/1

Come posso convincere la visualizzazione Web di un repository GitHub a utilizzare differenze basate su testo per determinati file "binari"?


Non riesco a trovare una domanda esistente per la mia domanda specifica (visualizzazione di un diff non binario su GitHub ).

Le seguenti domande si riferiscono a questo stesso comportamento, ma a locale git(non a GitHub).

  • Ignora la scelta di git del file binario in testo
  • Come metteresti uno script AppleScript sotto il controllo della versione?

La mia domanda è l' opposto di questa domanda, che cerca di visualizzare file di testo come file binari su GitHub:

  • Fai in modo che github utilizzi l'attributo "binary" .gitattributes

Risposte

1 bk2204 Oct 15 2020 at 09:28

Non c'è un modo per forzare GitHub a visualizzare questi file come testo perché non lo sono. Quando GitHub esegue il rendering dei file come parte di una pagina HTML, devono essere in una codifica e l'unica scelta ragionevole per le codifiche in questi giorni è UTF-8. Questi file non possono essere visualizzati così come sono come UTF-8 perché contengono sequenze di byte che non sono valide in UTF-8, oltre ai caratteri di controllo, che generalmente non possono essere visualizzati correttamente in una pagina web.

È possibile convertire questi file in testo per differire utilizzando un .gitattributesfile utilizzando il difftipo e l' diff.*.textconvattributo nel file di configurazione. Funziona alla grande sulla tua macchina, ma non funzionerà su GitHub. Prima di tutto, GitHub non ha il tuo strumento per il rendering dei file e, in secondo luogo, GitHub non supporta programmi esterni per il rendering dei file in generale, principalmente per motivi di sicurezza. Sono supportati alcuni formati comuni, ma questo non è uno di questi.

Notare inoltre che il programma da utilizzare è memorizzato nella configurazione di Git e non nel .gitattributesfile; ciò è intenzionale, poiché inviare un elenco di programmi da eseguire nel repository è un problema di sicurezza. Pertanto, GitHub non può nemmeno conoscere il programma che useresti qui.

Se i tuoi kmsyncfile hanno un equivalente di testo semplice che puoi compilare nel formato binario, puoi memorizzare quel formato nel repository e crearlo come parte di una fase di compilazione. Questo sarà diverso e fornirà comunque i formati binari che puoi usare per il tuo progetto. Non è diverso dalla compilazione di codice in binari o testo normale in PDF.