¿Cómo agregar files ejecutables de Linux a .gitignore?

¿Cómo se agregan los files ejecutables de Linux a .gitignore sin darles una extensión explícita y sin colocarlos en un directory específico o / bin? La mayoría tienen el mismo nombre que el file C desde el que se comstackron sin la extensión ".c".

¿Puedes ignorar todo, pero los files de código fuente?

Por ejemplo:

* !*.c !Makefile 

Los pondría explícitamente en el proyecto .gitignore. No es elegante, pero me imagino que su proyecto no tiene muchos de ellos.

La mayoría de los desarrolladores suelen tener un directory de build en su proyecto donde se ejecuta el process de compilation real. Entonces, todos los ejecutables, .o , .so , .a , etc. están allí y este directory de compilation se agrega al .gitignore .

Una forma de generar diferencias contra su .gitignore de una vez desde todos los files ejecutables del directory actual:

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

esto genera un diff que significa que no pierde ningún cambio manual en el file. Esto supone que su file .gitignore ya está orderado. La parte de sed simplemente elimina el líder ./ que genera el hallazgo.

No hay una forma automática de ignorar solo los files ejecutables, por lo que siempre tendrá que administrar el file manualmente.

Escribí un script para agregar automáticamente ejecutables 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" 

caracteristicas:

  • comienza a search desde la carpeta de nivel superior (¡podría ser una mala característica!)
  • ignora los files ELF, excluyendo los files .o y .so que pueden ignorarse con una regla genérica
  • conserva las inputs existentes en .gitignore sin duplicarlas

Esta versión de script único está aquí: http://sam.nipl.net/b/git-ignore-elf-1

Aquí hay una versión más modular, que depende de otros scripts (git-root, find-elf, uniqo) del mismo lugar: http://sam.nipl.net/b/git-ignore-elf