我的服务器中有以下文件结构:
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”目录中除“media/avatars/thbb70”及其所有文件之外的所有文件。
我可以实现到"avatars“目录,但当我深入研究时,它只包含整个"media”目录。
我的逻辑告诉我应该使用这个.gitignore:
# .gitignore file
app/webroot/media/*
!app/webroot/media/avatars/thumb70/*提前感谢您的帮助。
发布于 2015-02-23 00:27:29
忽略一个目录会忽略它的所有内容。如果你要打通配符ignore,**通配符可以让你的规范更清晰:
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采用不忽略路径来暗示不忽略该路径上的所有目录,那就太好了,但还没有人教它这样做,而且意外的后果总是令人担忧。
如果只想完全忽略特定目录,请在!*/行之后列出这些目录。
# don't do whole-directory ignores in general but make a special exception for any bin/
!*/
bin/发布于 2015-02-23 20:06:01
您可以按如下方式进行操作。
app/webroot/media/**
!app/webroot/media/**/
!app/webroot/media/avatars/thumb70/**只要记住先用!app/webroot/media/**/包含media文件夹下的所有目录即可。它不会单独影响忽略结果,因为git不跟踪文件夹,但它可以应用子目录的!规则。
发布于 2015-02-23 00:14:22
手册页声明(重点是我的):
a可选前缀"!“这将否定该模式;先前模式排除的任何匹配文件都将被再次包括在内。如果文件的父目录被排除,则无法重新包含该文件。出于性能原因,Git不会列出排除的目录,因此所包含文件上的任何模式都不起作用,无论它们是在哪里定义的。
所以一个丑陋的解决方案是:
# .gitignore file
app/webroot/media/*
!app/webroot/media/avatars
app/webroot/media/avatars/*
!app/webroot/media/avatars/thumb70/https://stackoverflow.com/questions/28659925
复制相似问题