使用.gitignore并不适用于我的场景

时间:2015-02-22 16:00:00

标签: git gitignore

我的服务器中有以下文件结构:

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/*

提前感谢您的帮助。

3 个答案:

答案 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/