Git exclude:仅包含特定目录及其子目录

时间:2015-05-25 04:47:23

标签: wordpress git

问题

我已经查看了有关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

有人能告诉我一个人是否比另一个人更有效率,还是纯粹的偏好?

3 个答案:

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