将内容文件夹索引到排除父文件夹中

时间:2017-01-19 16:47:58

标签: git gitignore

我有一个全局父文件夹/文件

我需要排除他的内容,所以我把这行:

files/*

进入.gitignore。

但是有一个文件夹“正常”(当然是文件夹/文件内容),我不想排除。

我尝试添加这一行:

!files/normal/*

但它不起作用。

我该怎么做?谢谢你的帮助

.gitignore文件:

vendor
files
!files/normal          # not work
.htaccess
.htpasswd

结构:

└───offres
    ├───normal
    └───unique

git status为空(只是.gitignore)

    modified:   ../.gitignore

2 个答案:

答案 0 :(得分:0)

直到最近,忽略一个目录并且不可逆转地忽略了它的所有内容 - 因为忽略一个意味着没有查看它的目录,它的内容永远不会与任何(其他)规则匹配。现在当你豁免路径时,它的父目录也被豁免以用于该忽略文件中的规则,但看起来你的git版本不是最近的。

files/*

忽略files中的所有内容,包括目录files/normal。因此,files/normal是一个被忽略的目录files/normal中的任何内容都没有经过测试 - 所有files/normal/anything规则根本就没有机会。

当工作树太庞大时,通常的通用修复方法就是添加

!*/

位于.gitignore的底部,表示"无论上面说的是什么,都不要完全忽略目录"并使用/*替换尾随/**以将显式通配符忽略匹配扩展到新未标记的深度。这不是默认值,因为有时候工作树真的很深,而且无用地扫描它们会产生持久的,烦人的速度障碍。

要修复此特定问题,请使用

files/*
!files/normal

(或等效地,在.gitignore的底部,只需输入

!*/

然后在那之后明确列出你真正想要简单地完全忽略的任何目录

答案 1 :(得分:0)

试试这个:

files/*              # excludes everything under dir `files`. Note that "/*" allows you to un-exclude a subfolder inside dir `files`       
!files/normal/       # un-excludes dir `files/normal` and (implicitly) everything under it.

如果您未将/*与目录files放在一起,则取消排除将无法使用。