2009-08-08 163 views
165

我想忽略存储库中的所有文件,除了发生在bin子目录中的文件。我尝试添加以下到我的.gitignore如何让Git忽略除子目录以外的所有内容?

* 
!bin/* 

这不会收到预期的效果,但是:我创建的bin/内一个新的文件,但这样做git status仍显示nothing to commit (working directory clean)

有什么建议吗?

+0

可能重复的[.gitignore排除文件夹,但包括特定的子文件夹](http://stackoverflow.com/questions/5533050/gitignore-exclude-folder-but-include-specific-subfolder) – 1615903 2017-03-30 13:51:16

回答

212

这忽略根文件&根目录,然后取消忽略根bin目录:

/* 
/*/ 
!/bin/ 

这样,你得到所有的bin目录包括子目录及其文件。

+13

出于某种原因,这并不始终如一地为我工作。我有两行'/东西/'和'!/材料/特定/',但它仍然忽略/材料/特定/ – 2013-11-18 00:00:12

+1

@ LB--我也有类似的问题,'混帐检查忽略-v'告诉我这是因为'〜/ .gitignore' – 2014-08-25 12:32:45

+0

@gurneyalex我发现它自我修复,如果我删除本地回购,并重新克隆它,它必须是一个错误。 – 2014-08-25 18:44:30

36

你唯一的问题是bin目录本身不匹配bin/*模式,所以git甚至不在bin目录中查找。

有两种解决方案值得思考。

.gitignore

* 
!/bin/ 
!bin/* 

.gitignore

* 
!/bin/ 

bin/.gitignore

!* 

我喜欢的S作为第一个解决方案的第二个解决方案不会停止忽略bin目录中不在名为bin的子目录中的文件。这可能会或可能不会影响您的情况。

+2

没有为我工作。我必须有这样的的.gitignore,使其工作: '#不顾一切 * #但是没有这些文件... /可湿性粉剂内容/ /可湿性粉剂内容/插件/ ! !/可湿性粉剂内容/插件/ my_plugin/ !/可湿性粉剂内容/插件/ my_plugin/*' 没有块注释代码? – xlttj 2012-02-28 08:26:36

+1

[泰勒的回答(http://stackoverflow.com/a/8594971/165673)具有更好的单个文件的解决方案 – Yarin 2012-07-17 12:02:56

10

我认为更好的办法是用斜线启动模式定位每个图案顶端的git目录:

/* 
!/public_html 
!/.gitignore 

而不是忽略所有的文件,它只会忽略顶层的文件,而不是在你不想忽略的目录中。

6

.gitignore作品对我来说:

*/ 
/* 
!bin/ 
74

这里如何在某个目录不顾一切exept一个目录 “MY_SUPER_DUPER_TEMPLATE_directory

结构:/的Bitrix /模板/ MY_SUPER_DUPER_TEMPLATE_directory

/* 
!/bitrix 
/bitrix/* 
!/bitrix/templates 
/bitrix/templates/* 
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory 
*.DS_Store 
*.gitignore 
+1

这解决了我的子子目录。谢谢 – frostymarvelous 2015-03-03 00:06:50

+5

的作品。什么东西不伤害眼睛? – ed22 2016-06-01 04:58:43

+0

这工作奇迹,取消了我已修改的laravel供应商包!谢谢你,为了包括一个目录,然后,排除它的内容,然后,包括所需的子目录等原理,你为我节省了很多头痛 – 2017-05-04 07:48:46

41

您必须在途中排除一切目的地,但你必须包括目的地:

/* 
!/tsp 
/tsp/* 
!/tsp/src 
/tsp/src/* 
!/tsp/src/*.h 
!/tsp/src/*.cpp 
!/tsp/src/data.txt 
!/.gitignore 

忽略除tsp目录外的所有内容,忽略tsp目录中的所有内容,除了src目录...

+9

+1。我最终在我的项目中使用了这个答案。 – 2013-09-06 15:54:55

10

请尝试关注最新的GIT版本。

* 
!*/ 
!/path/to/your/dir/** 
+0

它实际上应该是!/ path/to/your/dir/**最后一行 – faham 2016-09-10 04:42:14

+0

@faham,是的,只是加了它。 – Kirby 2016-11-30 13:20:45

5

试试这个不起眼的git bug。

!bin**/** 

希望它能帮助:)

支持文档git bug sample

PS:第一注解之前尝试。

9

从官方git doc,其中一个例子说:

例排除除了特定的目录富/条(注意/ *一切 - 没有斜杠,通配符也将排除foo中的一切/条):

$ cat .gitignore 
# exclude everything except directory foo/bar 
/* 
!/foo 
/foo/* 
!/foo/bar 

有关前导斜杠的说明:When to use leading slash in gitignore

相关问题