191

我的程序通常会生成巨大的输出文件(~1 GB),我不想备份到 git 存储库。所以,而不是能够做

git add .

我必须做类似的事情

git add *.c *.cc *.f *.F *.C *.h *.cu

这有点麻烦......

我相当有信心我可以编写一个快速的 perl 脚本 ls 将目录内容放入 .gitignore ,然后删除基于 .gitinclude (或类似名称)文件的文件,但这似乎有点太老套了。有没有更好的办法?

4

6 回答 6

271

我自己不需要尝试这个,但从我对TFM的阅读来看,它看起来像一个否定模式会做你想要的。您可以使用以后否定的条目覆盖 .gitignore 中的条目。因此,您可以执行以下操作:

*.c
!frob_*.c
!custom.c

让它忽略除 custom.c 和任何以“frob_”开头的所有 .c 文件

于 2009-08-14T19:23:26.353 回答
86

在您的存储库中创建 .gitignore 文件,并且您只想跟踪 c 文件并忽略所有其他文件,然后将以下行添加到其中...。

*
!*.c

'*' 将忽略所有文件

和 !将否定文件将被忽略....所以在这里我们要求 git 不要忽略 c 文件....

于 2010-10-01T06:26:53.230 回答
16

实现这一目标的最佳解决方案

在存储库中创建.gitignore文件root,如果您只想包含.c文件,则需要在.gitignore文件中添加以下行

*.*
!*.c

这将.c递归地包括目录和子目录中的所有文件。

使用

*
!*.c

不适用于所有版本的 git。

经测试

git 版本 2.12.2.windows.2

于 2017-04-16T15:14:45.800 回答
7

如果您需要忽略文件而不是目录中的特定文件,我是这样做的:

# Ignore everything under "directory"
directory/*
# But don't ignore "another_directory"
!directory/another_directory
# But ignore everything under "another_directory"
directory/another_directory/*
# But don't ignore "file_to_be_staged.txt"
!directory/another_directory/file_to_be_staged.txt
于 2020-04-01T03:52:48.650 回答
0

聚会迟到了,但我的解决方案是为源文件设置一个目录,为可执行文件和程序输出设置一个不同的目录,如下所示:

+ .git
|    (...)
+ bin
|    my_exe.exe
|    my_output.txt
+ src
     some_file.c
     some_file.h 

...然后只将这些东西添加src/到我的存储库中并完全忽略bin/

于 2019-11-08T11:01:46.970 回答
0

如果你只是想包含点文件,这对我有用......

!.*
于 2021-02-09T17:56:11.970 回答