除了一个文件夹及其所有内容之外的所有Gitignore - 无论嵌套级别

时间:2015-06-11 22:20:53

标签: git gitignore

我知道这个问题已被多次提出,但老实说 - 尽管有许多公认的答案,我还没有找到解决这个问题的巧妙方法。我强调这里的工作整洁

我想忽略除一个文件夹及其整个内容之外的所有内容。

这不会实现它:

*
!dest
!dest/*

将保留dest文件夹和dest中的所有文件,但不保留其中的其他文件夹以及这些子文件夹中的文件。

有人在评论中写道!如果您使用.gitignore *启动this,则无法指定您不希望忽略的完整路径,从而无法实现此类问题之一。

我现在确信他是对的。或者是否有整洁方式忽略除一个文件夹及其整个内容之外的所有内容

1 个答案:

答案 0 :(得分:4)

我刚刚测试过(使用最近的Git,even on Windows

*
!dest/
!dest/**

像往常一样,您只需遵循以下规则:

  

<强> It is not possible to re-include a file if a parent directory of that file is excluded. (*)
  (*:除非在git 2.?+中满足某些条件,请参见下文)

dest文件夹列入白名单(!dest/)后,您可以轻松(!dest/**)排除其内容(多个级别)。

从那里开始,任何git check-ignore -v dest/x/y/z/aFile都不会返回任何内容,这意味着会添加aFile

我在“Gitignore exclude certain files in all subdirectories”中提到了类似的原则(略有不同的解决方案)。

请注意,使用git 2.9.x / 2.10(2016年中期?),如果排除该文件的父目录if there is no wildcard in the path re-included,则可能会重新包含文件。

Nguyễn Thái Ngọc Duy (pclouds)正在尝试添加此功能:

在这里,这应该适用于git 2.9 +:

*
!dest