2011-11-23 2 views
42

Come si aggiungono i file eseguibili di linux a .gitignore senza dare loro un'estensione esplicita e senza collocarli in una directory specifica o bin? La maggior parte sono denominati come il file C da cui sono stati compilati senza l'estensione ".c".Come aggiungere file eseguibili di Linux a .gitignore?

+0

Questo è praticamente un duplicato di http://stackoverflow.com/questions/5711120/gitignore-withoutbinary-files Potrebbe unirli. –

+0

No, c'è una differenza tra file eseguibili e file binari. Vedo la necessità di ignorare sia gli script eseguibili che i file binari. Non penso che questa domanda sia un duplicato. – Alexander

risposta

10

Inserirli esplicitamente nel progetto .gitignore. Non è elegante, ma immagino che il tuo progetto non abbia quello molti di loro.

+3

Il motivo per cui sono incappato in questa domanda è esattamente perché * ha * che molti di loro. –

3

Un modo di generare differenze contro il vostro .gitignore in un colpo solo da tutti i file eseguibili dalla directory corrente:

find . -perm /111 -type f | sed 's#^./##' | sort | diff -u .gitignore - 

questo genera un diff che significa che non perdere le modifiche manuali al file. Ciò presuppone che il tuo file .gitignore sia già ordinato. La parte sed semplicemente spoglia il leader ./ che trova genera.

Non esiste un modo automatico per ignorare solo i file eseguibili, quindi sarà sempre necessario gestire il file man-man.

26

Si può ignorare tutto, ma i file del codice sorgente?

Ad esempio:

* 
!*.c 
!Makefile 
3

Ho scritto uno script per aggiungere automaticamente gli eseguibili ELF a .gitignore.

git-ignore-elf:

#!/bin/sh 
set -eu 
cd "$(git rev-parse --show-toplevel)" 
file=.gitignore 
new=$file.new.$$ 
(
if [ -e "$file" ]; then 
    cat "$file" 
fi 
find . -name .git -prune -o -type f ! -name '*.o' ! -name '*.so' \ 
    -print0 | xargs -0 file | grep ': *ELF ' | sed 's/:.*//' | 
sed 's,^./,,' 
) | perl -ne 'print if !$already{$_}++' >"$new" 
mv "$new" "$file" 

Caratteristiche:

  • inizia guardando dalla cartella di primo livello (potrebbe essere un misfeature!)
  • ignora i file ELF, escluso .o e file .so che può essere ignorata con una regola generica
  • conserva le voci esistenti in .gitignore senza duplicarle

Questa versione single-script è qui: http://sam.nipl.net/b/git-ignore-elf-1

Ecco una versione più modulare, che dipende da altri script (git-root, find-elfo, uniqo) dallo stesso luogo: http://sam.nipl.net/b/git-ignore-elf

+0

c'è una risposta simile usando python e file (1), qui: http://stackoverflow.com/a/19749478/218294 –

4

La maggior parte degli sviluppatori di solito ha una directory build nel proprio progetto in cui viene eseguito il processo di compilazione effettivo. Quindi, tutti gli eseguibili, .o, .so, .a, ecc. Sono lì e questa directory di build è stata aggiunta a .gitignore.