2013-09-24 4 views
12

Ho un repository con molti file sorgente generati automaticamente che ho contrassegnato come "binario" in .gitattributes (sono stati archiviati perché non tutti hanno accesso agli strumenti del generatore). Inoltre, il repository ha un sacco di file sorgente-ish nelle directory ignorate (di nuovo, generate come parte dei processi di compilazione) e un numero di file binari effettivi (ad esempio file di risorse di piccole dimensioni come icone).Come elencare tutti i file di testo (non binari) in un repository git?

Vorrei ora trovare tutti i file non generati automaticamente e non ignorati nel repository. Ho pensato di fare questo con find e un sacco di esclusioni, ma ora ho un'orrenda affermazione find con una dozzina di clausole (e ancora non funziona perfettamente). git ls-files funziona ma mostra tutti i file binari senza differenziazione, che devo filtrare.

Quindi, mi chiedo: c'è un semplice comando che posso eseguire in cui elenchi ogni file controllato nel repository e quale git considera un file di "testo"?

risposta

12
git grep --cached -Il '' 

funziona perché:

  • -I: non corrispondono al modello in file binari
  • -l: mostrare solo i nomi dei file di corrispondenza, non corrispondenti linee
  • '': partite stringa vuota qualsiasi file

Oppure è possibile utilizzare How to determine if Git handles a file as binary or as text? in un ciclo for con git ls-files.

Trova tutti i file binari invece: Find all binary files in git HEAD

NOTA BENE: Cacovsky dice contenuti simili, ho provato a modificare per migliorare formato e spiegare le opzioni, la modifica è stata invertita, quindi ecco qui :-)

+0

E per le pipe in 'xargs -0' c'è l'opzione' -z'. – raphinesse

0

Il metodo standard per la messa in vendita di file non è ignorato:

git ls-files --exclude-standard --cached 

Ma, come avete visto, elenca tutti i file di versione.

Una soluzione alternativa potrebbe essere quella di definire in un file separato "exclude_binaries" un exclusion pattern per far corrispondere tutti i binari che si conoscono.

git ls-files --exclude-standard --cached \ 
--exclude-from=/path/to/`exclude_binaries` 

che sarebbe un meno complesso find, ma non fornisce un modo completamente automatizzato, per elencare i file non binari: si devono ancora identificare ed elencarli in un file modello separato.

2

Un hack intelligente per raggiungere questo obiettivo: l'elenco di tutti i file non binari che contiene ritorni a capo

$ git grep --cached -I -l -e $'\r' 

per il mio caso, una stringa vuota funziona meglio:

$ git grep --cached -I -l -e $'' 

preso da git list binary and/or non-binary files?.

+1

Non c'è bisogno per '$' in '$ '',' '' 'è più portabile. –