我已经查看了有关SO的所有相关问题,所以如果答案确实在那里,我道歉。
问题在于:我想排除除一个目录及其所有内容(包括子目录)之外的所有内容。
工作目录是一个WordPress安装,对于这个特定的回购我只想包括wp-content/themes/*
我能做到的唯一方法是,如果我这样做:
# Blacklist everything
*
# Whitelist all directories
!*/
# Whitelist anything you want to include
!wp-content/themes/*
!wp-content/themes/*/*
!wp-content/themes/*/*/*
!wp-content/themes/*/*/*/*
!wp-content/themes/*/*/*/*/*
!wp-content/themes/*/*/*/*/*/*
!wp-content/themes/*/*/*/*/*/*/*
!wp-content/themes/*/*/*/*/*/*/*/*
!wp-content/themes/*/*/*/*/*/*/*/*/*
!wp-content/themes/*/*/*/*/*/*/*/*/*/*
!wp-content/themes/*/*/*/*/*/*/*/*/*/*/*
现在这看起来很傻,觉得我做错了。对于级别高于此处指定的目录,它也不起作用。 *
行似乎告诉Git忽略任何子目录,即使否定模式似乎包含它。
以下两个答案都有效:
的#1
*
!*/
!wp-content/themes/**
#2
*
!wp-content/
!wp-content/themes/
!wp-content/themes/**
#3
/*
!/wp-content
/wp-content/*
!/wp-content/themes
有人能告诉我一个人是否比另一个人更有效率,还是纯粹的偏好?
答案 0 :(得分:2)
您使用**
来匹配所有子目录。这应该有效:
*
!wp-content/
!wp-content/themes/
!wp-content/themes/**
答案 1 :(得分:2)
在一个非常大的回购Klas Mellbourn's answer中展示了如何避免足够的不必要的扫描,以便它第一次保存显着的时间(就像在大树上find
一样),但他们倾向于保持缓存。对于几乎所有内容,!*/
后跟任何内容包含都很有用。所以:
*
!*/
!wp-content/themes/**
无论它有多深,它还可以为您提供每行一个目录。
答案 2 :(得分:1)
我接受它:
忽略除wp-content之外的此文件夹(根文件夹)中的所有内容,然后忽略wp-content中除主题之外的所有内容。
通过这种方式,您不会忽略所有内容并且不得不重读,只需要跟踪的2个文件夹。 (/*
行按原样,它不是注释)
/*
!/wp-content
/wp-content/*
!/wp-content/themes