除了两个子目录外,如何忽略项目中的所有文件?我不想在Git中包含所有Wordpress,但我确实希望包含自定义主题。我有两个兄弟目录,所以我不想要两个单独的Git项目。
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
答案 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.如果仍然忽略其父目录,则不会包含文件/目录。