如何在git中使用.gitignore文件忽略二进制文件?

例子:

$ g++ hello.c -o hello

“hello”文件是二进制文件。git可以忽略这个文件吗?


当前回答

要将所有可执行文件追加到.gitignore(从您的问题判断,您可能指的是“二进制文件”),可以使用

find . -executable -type f >>.gitignore

如果您不关心.gitignore中的行顺序,您还可以使用以下命令更新.gitignore,该命令还可以删除重复项并保持字母顺序不变。

T=$(mktemp); (cat .gitignore; find . -executable -type f | sed -e 's%^\./%%') | sort | uniq >$T; mv $T .gitignore

注意,不能将输出直接输送到.gitignore,因为这会在cat打开文件以供读取之前截断该文件。此外,您可能还想添加\!正则表达式”。* / * /。如果您不希望在子目录中包含可执行文件,则可以将*'作为查找选项。

其他回答

我不知道还有什么别的办法,只能把它们一个一个地加到。gitignore中。

一个粗略的测试方法是grep文件命令的输出:

find . \( ! -regex '.*/\..*' \) -type f | xargs -n 1 file | egrep "ASCII|text"

EDIT

为什么不直接将可执行文件命名为hello.bin呢?

如果您正在使用makefile,可以尝试修改make规则,将新二进制文件的名称附加到.gitignore文件中。

下面是一个小型Haskell项目的Makefile示例;

all: $(patsubst %.hs, %, $(wildcard *.hs))

%: %.hs
    ghc $^
    grep -xq "$@" .gitignore || echo $@ >> .gitignore

这个makefile定义了一个用Haskell代码创建可执行文件的规则。在ghc被调用之后,我们检查.gitignore,看看二进制文件是否已经在其中。如果不是,我们将二进制文件的名称附加到文件中。

要将所有可执行文件追加到.gitignore(从您的问题判断,您可能指的是“二进制文件”),可以使用

find . -executable -type f >>.gitignore

如果您不关心.gitignore中的行顺序,您还可以使用以下命令更新.gitignore,该命令还可以删除重复项并保持字母顺序不变。

T=$(mktemp); (cat .gitignore; find . -executable -type f | sed -e 's%^\./%%') | sort | uniq >$T; mv $T .gitignore

注意,不能将输出直接输送到.gitignore,因为这会在cat打开文件以供读取之前截断该文件。此外,您可能还想添加\!正则表达式”。* / * /。如果您不希望在子目录中包含可执行文件,则可以将*'作为查找选项。

添加如下内容

*.o

在.gitignore文件中,把它放在你的repo的根目录下(或者你可以把它放在你想要的任何子目录中——它将从那个级别应用),然后签入。

编辑:

对于没有扩展名的二进制文件,最好将它们放在bin/或其他文件夹中。毕竟没有基于内容类型的忽略。

你可以试试

*
!*.*

但这并非万无一失。

老帖子,但仍然相关。 我修改了makefile,这样链接后产生的二进制文件的名称为[filname].bin,而不是只有[filname]。然后我在gitignore中添加了*.bin文件。 这个例行程序满足了我的需要。