我的服务器中有以下文件结构:
app/webroot/media/avatars/original/1424293016.png
app/webroot/media/avatars/original/usrimg.jpg
app/webroot/media/avatars/thumb150/1424293016.png
app/webroot/media/avatars/thumb150/usrimg.jpg
app/webroot/media/avatars/thumb350/1424293016.png
app/webroot/media/avatars/thumb350/usrimg.jpg
app/webroot/media/avatars/thumb70/1424293016.png
app/webroot/media/avatars/thumb70/usrimg.jpg
我想排除'媒体'内的所有文件。目录除了' media / avatars / thumb70'以及它的所有文件。
我可以达到"头像"目录,但当我更深入时,它只是将整个"媒体" 。目录
我的逻辑告诉我,我应该使用这个.gitignore:
# .gitignore file
app/webroot/media/*
!app/webroot/media/avatars/thumb70/*
提前感谢您的帮助。
答案 0 :(得分:1)
忽略目录会立即忽略其所有内容。如果您打算通过一个通配符忽略,**
通配符可以实现更清晰的规范:
app/webroot/media/**
!app/webroot/media/avatars/
!app/webroot/media/avatars/thumb70/
!app/webroot/media/avatars/thumb70/**
如果您的项目可能扩展到数百个文件夹,那么是这样做的,但如果您不喜欢摘要排除功能,只需通过附加!*/
关闭它:
app/webroot/**
!app/webroot/media/avatars/thumb70/**
# whole-directory excludes disabled in the above:
!*/
*
只匹配一个级别,因此如果您不完全忽略某个目录,则必须使用**
对其所有内容进行通配。
如果git会为这条路径上的所有目录带来一条暗示unignores的路径,那将是很好的,但是没有人教它做这件事而且意想不到的后果总是令人担忧。
如果您只想完全忽略特定目录,请列出!*/
行之后的那些目录。
# don't do whole-directory ignores in general but make a special exception for any bin/
!*/
bin/
答案 1 :(得分:1)
您可以按照以下方式执行此操作。
app/webroot/media/**
!app/webroot/media/**/
!app/webroot/media/avatars/thumb70/**
请记住首先使用media
包含文件夹!app/webroot/media/**/
下的所有目录。它不会单独影响忽略结果,因为git不跟踪文件夹,但它可以应用子目录的!
规则。
答案 2 :(得分:0)
手册页说明(强调我的):
可选前缀“!”否定了这种模式;任何匹配的文件 被先前模式排除的将被再次包括在内。 是的 如果是父目录,则无法重新包含文件 文件被排除在外。 Git没有列出排除的目录 性能原因,所以包含文件的任何模式都没有 效果,无论它们在何处定义。
所以一个丑陋的解决方案是:
# .gitignore file
app/webroot/media/*
!app/webroot/media/avatars
app/webroot/media/avatars/*
!app/webroot/media/avatars/thumb70/