如何添加Linux可执行文件到.gitignore
How to Add Linux Executable Files to .gitignore?
如何将Linux可执行文件添加到.gitignore
而不给它们明确的扩展名,并且不将它们放置在特定的或/bin
目录中?大多数命名与编译它们的C
文件相同,没有.c
扩展名。
可以忽略除源代码以外的所有文件吗?
例如:*
!*.c
!Makefile
大多数开发人员通常在他们的项目中有一个build
目录,其中运行实际的构建过程。因此,所有可执行文件,.o
, .so
, .a
等都在那里,并且这个构建目录被添加到.gitignore
中。
我会显式地将它们放在项目.gitignore中。这并不优雅,但我想你的项目中没有那么多
我编写了一个脚本来自动将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
一种从当前目录的所有可执行文件中一次性生成与.gitignore
不同的方法:
find . -perm /111 -type f | sed 's#^./##' | sort | diff -u .gitignore -
生成一个diff,这意味着您不会丢失对文件的任何手动更改。这假设您的.gitignore
文件已经排序。sed部分只剥离find生成的前导./
。
没有自动忽略可执行文件的方法,所以你总是需要人工管理文件。
忽略所有c/c++可执行文件将此保存在.gitignore
文件中,这会忽略所有没有文件扩展名的文件,因为linux中通常没有c/c++可执行文件的文件扩展名
*
!*.*
!*/
如果你碰巧有一个"项目";对于相当多的可执行文件,例如,一个研究项目中有许多小的练习需要编译,您可以使用以下单行代码来更新.gitignore:
for f in $(find . -perm /111 -type f | grep -v '.git' | sed 's#^./##' | sort -u); do grep -q "$f" .gitignore || echo "$f" >> .gitignore ; done
所有未跟踪和未忽略的文件或存储库:
git ls-files --others --exclude-standard
可执行文件:
find -type f -executable
将所有未跟踪的未忽略的文件添加到.gitignore:
git ls-files -z --exclude-standard --others
| find -files0-from /dev/stdin -type f -executable > new.$$
[ -s new.$$ ] && ( cat new.$$ >>.gitignore; rm new.$$; git add .gitignore )
或者真的,试着不要把事情弄得一团糟。
bin/
中,然后完成它。我也曾多次试图弄清楚这个问题。我想分享一个长久有效的解决方法。虽然我是从Go的角度写的,但我相信这是普遍适用的。
首先,观察到的是,在典型的项目中,可执行文件(和/或二进制文件)比其他文件少得多。另外,值得注意的是,将源文件显式标记为"不忽略",并忽略其他所有内容的方法并不能很好地工作,因为我们希望我们的注释和文本文件,例如,也被git。
所以解决方案是制定一个约定,可执行文件有。e后缀,而。gitignore有*。E in it.
我不知道,你可以添加一个或两个规则,在Makefile;比如:
$(TARGET): $(TARGET).o
$(CC) -ggdb -o $@ $^
@grep $@ .gitignore > tmp || true
@[ -s tmp ] || echo $@ >> .gitignore; rm tmp
这可能有帮助:
file * | sed -n '/text/d;/exec/s/^(.*):.*/1/p'
基本上它搜索所有非文本文件的可执行文件,因此是二进制文件。如果需要ELF二进制文件,它可以是这样的:
file * | sed -n '/text/d;/ELF.*exec/s/^(.*):.*/1/p'
并将结果放入。gitignore
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- 如何从 Linux 交叉编译到 32 位 Windows 可执行文件
- 不同的数学符号绑定与共享库与 dlopen 并直接链接到可执行文件 (Linux)
- C++ Linux 可执行文件一直尝试使用不存在的库
- Linux 可执行文件中列出的源文件
- 作为共享库的 Linux 可执行文件
- a.out Linux 可执行文件是哪个程序
- 如何从存储在其他文件夹中的C++运行linux可执行文件
- 如何添加Linux可执行文件到.gitignore
- 欺骗Linux:可执行文件和依赖库通过LD_PRELOAD
- Linux 可执行文件在同一文件夹中找不到共享库
- 如何从windows g++ cygwin交叉编译得到linux可执行文件