如何将linux可执行文件添加到.gitignore而不给它们显式扩展并且不将它们放在特定或/ bin目录中?大多数命名与编译它们的C文件相同,没有“.c”扩展名。
答案 0 :(得分:35)
你能忽略所有但源代码文件吗?
例如:
*
!*.c
!Makefile
答案 1 :(得分:13)
我会明确地将它们放在项目.gitignore中。它并不优雅,但我想你的项目中没有那些很多。
答案 2 :(得分:5)
我编写了一个脚本来自动将ELF可执行文件添加到.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"
特点:
此单脚本版本位于:http://sam.nipl.net/b/git-ignore-elf-1
这是一个更模块化的版本,它依赖于来自同一地方的其他脚本(git-root,find-elf,uniqo):http://sam.nipl.net/b/git-ignore-elf
答案 3 :(得分:5)
大多数开发人员通常在他们的项目中有一个build
目录,其中包含运行中的实际构建过程。
因此,所有可执行文件.o
,.so
,.a
等都在那里,此构建目录已添加到.gitignore
。
答案 4 :(得分:3)
从当前目录的所有可执行文件中一次性生成与.gitignore
的差异的方法:
find . -perm /111 -type f | sed 's#^./##' | sort | diff -u .gitignore -
这会生成差异意味着您不会丢失对文件的任何手动更改。这假定您的.gitignore
文件已经排序。 sed部分只删除了找到生成的前导./
。
没有自动方式只忽略可执行文件,所以你总是需要人工管理文件。
答案 5 :(得分:1)
如果你碰巧有一个包含很多可执行文件的“项目”,例如,一个有很多小练习结果被编译的学习项目,你可以使用这个单行代码来更新你的 .gitignore:
10000 extra-section execute-in-my-section
\ execute-in-my-section ( i*x xt -- j*x )
unused cr . \ free space in the default dictionary
[:
unused cr . \ free space in the current section
:noname
postpone .
postpone ;
( xt-new )
unused cr . \ free space after compile the new definition
;] execute-in-my-section ( xt-new )
\ test
123 swap execute
答案 6 :(得分:0)
我也试图多次弄清楚这个问题。想分享长期困扰的解决方案。尽管我是从Go角度编写此文章的,但我认为这通常是适用的。
首先,观察到的是,典型项目中的可执行文件(和/或二进制文件)少得多,而其他所有文件都少。另外,值得注意的是,用来显式标记源文件“不忽略”并忽略其他所有内容的方法也不起作用,因为我们也希望将注释和文本文件混在一起。>
因此解决方案是约定可执行文件带有.e后缀,而.gitignore带有* .e。
这很简单,效果很好。