.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
相關文章
相關標籤/搜索