如何将Linux可执行文件添加到.gitignore?

时间:2011-11-23 05:17:24

标签: c++ c linux git gitignore

如何将linux可执行文件添加到.gitignore而不给它们显式扩展并且不将它们放在特定或/ bin目录中?大多数命名与编译它们的C文件相同,没有“.c”扩展名。

7 个答案:

答案 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"

特点:

  • 从顶级文件夹开始查找(可能是错误的!)
  • 忽略ELF文件,不包括.o和.so文件,可以使用通用规则忽略
  • 保留.gitignore中的现有条目而不重复它们

此单脚本版本位于: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。

这很简单,效果很好。