.gitignore排除文件夹,但包括特定的子文件夹

我有文件夹application/我添加到.gitignore 。 在application/文件夹中是文件夹application/language/gr 。 如何包含此文件夹? node

我已经试过了 git

application/
!application/language/gr/

没有运气... 程序员


#1楼

@Chris Johnsen的答案很好,可是对于较新版本的Git(1.8.2或更高版本),您能够利用双星号模式来得到更多速记解决方案: github

# assuming the root folder you want to ignore is 'application'
application/**/*

# the subfolder(s) you want to track:
!application/language/gr/

这样,您没必要“忽略”要跟踪的子文件夹的父目录。 json


对于Git 2.17.0(不肯定此版本的发布时间。可能回到1.8.2以前的版本),对致使文件生成的每一个子目录使用**模式与excludes结合使用。 例如: app

# assuming the root folder you want to ignore is 'application'
application/**

# Explicitly track certain content nested in the 'application' folder:
!application/language/
!application/language/gr/
!application/language/gr/** # Example adding all files & folder in the 'gr' folder
!application/language/gr/SomeFile.txt # Example adding specific file in the 'gr' folder

#2楼

来自Karsten Blees(kblees)的Git 1.9 / 2.0 提交59856de (2014年第1季度)澄清了如下状况: wordpress

gitignore.txt :阐明排除目录的递归性质

可选的前缀“ ! ”,用于否认模式; 先前模式排除的全部匹配文件将再次包含在内。 性能

若是排除该文件的父目录,则没法从新包含该文件。 *
* :除非git 2.8+中知足某些条件,请参阅下文)
因为性能缘由,Git不会列出被排除的目录,所以包含在文件上的任何模式(不管它们在何处定义)都无效。 spa

对于以文字“ ! ”开头的模式,例如“ \\!important!.txt ”,在第一个“ ! ”前面放置反斜杠(“ \\ ”)。 .net

排除特定目录foo/bar之外的全部内容的示例(请注意/* -不带斜杠,通配符还将排除foo/bar内的全部内容):

--------------------------------------------------------------
     $ cat .gitignore
     # exclude everything except directory foo/bar
     /*
     !/foo
     /foo/*
     !/foo/bar
 --------------------------------------------------------------

在您的状况下:

application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**

您必须先将文件夹列入白名单,而后才能将给定文件夹中的文件列入白名单。


2016年2月/ 3月更新:

请注意,在git 2.9.x / 2.10(2016年中?)下, 若是从新包含的路径中没有通配符,则若是排除了该文件的父目录,则能够从新包含该文件。

NguyễnTháiNgọcDuy( pclouds试图添加此功能:

所以,使用git 2.9+可能确实有效,但最终被还原:

application/
!application/language/gr/

#3楼

关于此还有不少相似的问题,所以我将发布我以前写的内容:

我在计算机上使用此方法的惟一方法是这样作:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*

请注意,您必须如何明确容许要包含的每一个级别的内容。 所以,若是我在主题下有5个子目录,则仍然须要清楚地说明。

这是来自@Yarin的评论: https : //stackoverflow.com/a/5250314/1696153

这些是有用的主题:

我也试过

*
*/*
**/**

**/wp-content/themes/**

/wp-content/themes/**/*

这些都不对我有用。 大量的反复试验!


#4楼

所以,因为许多程序员都使用node。 知足此问题的用例是排除一个模块module-a之外的node_modules ,例如:

!node_modules/

node_modules/*
!node_modules/module-a/

#5楼

走下目录结构以获取所需内容的另外一个示例。 注意:我没有排除Library/而是Library/**/*

# .gitignore file
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme

> git add Library

> git status

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
    new file:   Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
    new file:   Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
    new file:   Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
    new file:   Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
    new file:   Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings
相关文章
相关标签/搜索