有没有办法告诉git只包含某些文件而不是忽略某些文件?

时间:2009-08-14 18:50:34

标签: git gitignore

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

git add .

我必须做类似

的事情
git add *.c *.cc *.f *.F *.C *.h *.cu

这有点麻烦...

我相信我可以编写一个快速的perl脚本将目录内容写入.gitignore,然后根据.gitinclude(或某些类似的名称)文件删除文件,但这似乎有些过于苛刻。还有更好的方法吗?

7 个答案:

答案 0 :(得分:196)

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

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

让它忽略除custom.c之外的所有.c文件以及以“frob _”

开头的任何内容

答案 1 :(得分:66)

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

*
!*.c

'*'将忽略所有文件

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

答案 2 :(得分:7)

  

实现此目标的最佳解决方案

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

*.*
!*.c

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

使用

*
!*.c

不适用于所有版本的git。

  

经过测试

     

git version 2.12.2.windows.2

答案 3 :(得分:3)

如果您需要忽略文件而不是目录中的特定文件,请按以下步骤操作:

# 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

答案 4 :(得分:1)

在gitignore中使用

*.*
!*.c

使用git版本2.7.4进行测试

答案 5 :(得分:1)

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

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

...,然后仅将src/中的内容添加到我的存储库中,而完全忽略bin/

答案 6 :(得分:0)

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

!.*