2009-08-14 151 views
123

我的程序通常会生成巨大的输出文件(〜1 GB),我不想备份到git存储库。因此,而不是能够做有没有办法告诉git只包含某些文件而不是忽略某些文件?

git add . 

我必须做一些像

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

这是一个有点繁琐......

我觉得相当有信心,我可以写一个Perl的quicky脚本将目录内容放入.gitignore中,然后根据.gitinclude(或某个类似的名称)文件移除文件,但这看起来有点太过分。有没有更好的办法?

回答

159

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

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

把它忽略除custom.c和任何开头“frob_”

+14

谢谢测试, TED这工作。我所要做的只是使用*开始.gitignore文件,然后列出所有包含文件模式的感叹号。 – 2009-08-14 19:44:48

+5

如何处理文件夹?我无法找到一种通过否定规则来包含文件夹和文件的方法。 – 2013-10-30 16:24:05

+1

关于文件夹请检查http://stackoverflow.com/questions/12799855/configure-git-to-track-only-one-file-extension – uzsolt 2014-07-16 05:48:44

58

创建资源库的.gitignore文件中的所有.c文件,你只想跟踪C文件,而忽略其他所有文件,然后将下列行添加到它....

* 
!*.c 

“*”会忽略所有的文件

和!将否定的文件是忽略了....所以这里我们要求的git不会忽略C文件....

+0

您是否还需要隐藏文件的'。*'? – trusktr 2013-06-04 05:42:45

+1

即使'.'也是通配符,所以隐藏文件也会被忽略,但是所有以'.c'结尾的隐藏文件都包含在内。 – Rohmer 2014-04-26 01:38:51

+2

使用这种方法,我认为来自子文件夹的文件也被忽略。检查此更多详细信息http://stackoverflow.com/a/11853075/739436 – popas 2015-05-04 07:38:16

2

最好的解决方案来实现这一

在仓库root创建.gitignore文件,如果你想只包括.c文件,那么你需要下面几行添加到.gitignore文件

*.* 
!*.c 

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

使用

* 
!*.c 

将无法​​在所有版本的git的工作。

测试在

Git版本2.12.2.windows.2

+0

是的,我和'*'有同样的问题,不得不使用'*。*'。这是在Windows上使用gitbash和git版本2.9.0.windows.1 – 2017-07-07 04:01:52

0

使用这gitignore

*.* 
!*.c 

使用Git版本2.7.4

相关问题