我有文件夹应用程序/,我添加到.gitignore。在应用程序/文件夹中是文件夹application/language/gr。我如何包含这个文件夹?

我试过了

application/
!application/language/gr/

当前回答

对于Git 1.9/2.0(2014年第一季度),Karsten Blees (kblees)的提交59856de澄清了这种情况:

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

可选前缀“!”,否定模式;任何被前一个模式排除的匹配文件将被重新包含。 如果排除了文件的父目录,则无法重新包含该文件。(*) (*:除非git 2.8+满足某些条件,见下文) 出于性能原因,Git没有列出排除的目录,因此所包含文件上的任何模式都没有影响,无论它们定义在哪里。 对于以文字“!”开头的模式,在第一个“!”前面加一个反斜杠(“\”),例如,“\!important!.txt”。 示例排除除特定目录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年年中?)中,如果重新包含的路径中没有通配符,则该文件的父目录被排除在外,则可能重新包含该文件。

nguyforgen Thái ngeconc Duy (pclouds)正在尝试添加这个特性:

git v2.7.0提交506d8f1, git v2.8.0-rc0提交76b620d Commit 5e57f9c git v2.8.0-rc0在提交5cee3493 git 2.8.0时被恢复(!)。

因此,在git 2.9+中,这实际上是可以工作的,但最终被恢复了:

application/
!application/language/gr/

其他回答

添加一个额外的答案:

!/.vs/              <== include this folder to source control, folder only, nothing else
/.vs/*              <== but ignore all files and sub-folder inside this folder
!/.vs/ProjectSettings.json <== but include this file to source control
!/.vs/config/       <== then include this folder to source control, folder only, nothing else
!/.vs/config/*      <== then include all files inside the folder

结果如下:

我发现只有这个可行。

**/node_modules/*
!**/node_modules/keep-dir

最简单也可能是最好的方法是手动添加文件(通常这优先于.gitignore风格的规则):

git add /path/to/module

如果文件已经被忽略,则可能需要-f。您甚至可能希望使用-N意图添加标志,以建议您将添加它们,但不是立即添加。我经常对我还没有准备好的新文件这样做。


这是一个答案的副本张贴在什么很容易是一个重复的QA。我在这里重新发布是为了增加能见度——我发现不搞乱gitignore规则更容易。

这是另一个遍历目录结构以获得所需内容的示例。注意:我没有排除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添加库

> git 状态

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

因为很多程序员使用node。满足这个问题的用例是排除node_modules,除了一个模块module-a,例如:

!node_modules/

node_modules/*
!node_modules/module-a/