除了两个子目录外,我如何Gitignore所有文件?

时间:2014-08-10 00:52:43

标签: wordpress git gitignore

除了两个子目录外,如何忽略项目中的所有文件?我不想在Git中包含所有Wordpress,但我确实希望包含自定义主题。我有两个兄弟目录,所以我不想要两个单独的Git项目。

的.gitignore

src/
!src/wp-content/themes/chocolat-child/
!src/wp-content/themes/theme2

这是一个新的存储库初始化,没有历史记录或提交。当我检查状态时,它忽略了子目录。

>git status
# Initial commit
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#       .gitignore
#       .project
#       .settings/

我在文档中看到了这一部分,但必须有一个解决方法:http://git-scm.com/docs/gitignore

  

可选前缀&#34;!&#34;否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果排除该文件的父目录,则无法重新包含文件。由于性能原因,Git没有列出被排除的目录,因此无论在何处定义,所包含文件的任何模式都无效。在第一个&#34;!&#34;前面放一个反斜杠(&#34; \&#34;)对于以文字&#34;!&#34;开头的模式,例如&#34;!important!.txt&#34;。

我看到了这个问题,但这是由于隐藏的Drupal .gitignore,所以它并没有解决我的问题:Ignoring a directory...but not a subdirectory or two

版本

git version 1.8.1.msysgit.1

2 个答案:

答案 0 :(得分:0)

好的我找到了办法,但这太荒谬了!如果添加了新文件,这种方式将列出未跟踪的文件。

# Ignore everything in src/ except wp-content/
src/*
!src/wp-content/
# Ignore everything in wp-content/ except themes/
src/wp-content/*
!src/wp-content/themes/
# Ignore everything in themes/ except for these 2 themes
src/wp-content/themes/*
!src/wp-content/themes/chocolat-child/
!src/wp-content/themes/othertheme

答案 1 :(得分:0)

实际上你可以让它更优雅一点。以下内容适合您。只需记住目录,您需要在模式的末尾添加**以包含其下的所有文件,但不仅包括目录本身。

src/**
!src/**/
# for directories
!src/wp-content/themes/chocolat-child/**
# for files
!src/wp-content/themes/othertheme

如果您还想忽略src目录之外的所有文件/目录,请按以下步骤进行操作。

*
!*/
# for directories
!src/wp-content/themes/chocolat-child/**
# for files
!src/wp-content/themes/othertheme

要了解原因,请参阅my answer to a SO question。一般来说,.gitignore中的否定模式有2条规则。

规则1.文件和目录在模式中分开处理。要包含一个目录并不意味着它的子文件/目录也包括在内。

规则2.如果仍然忽略其父目录,则不会包含文件/目录。