使git忽略除某些文件之外的所有目录树

时间:2018-01-11 10:20:03

标签: git gitignore

我试图让git忽略整个packages目录,除了它里面的.targets文件,无论它们在哪里。我在.gitignore中尝试此操作但是git仍然忽略整个packages目录,尽管存在.targets个文件:

/packages/*
!/packages/**/*.targets

我还尝试过另一个SO问题和非黑名单目录的建议,但它仍然没有工作(这次,它只包括所有的dir包):

/packages/*
!/packages/**/
!/packages/**/*.targets

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

好吧我明白了 - 关键是要理解Git可以忽略目录和文件,但是如果它忽略了一个目录,那么就不会在.gitignore的其余部分搜索该目录的子结构。

首先你忽略了/packages内容中的所有内容,然后你将目录列入白名单(由于Git中的空目录或者忽略了所有文件的目录,它仍然不会添加任何内容,没有添加),然后你将.targets文件列入白名单,因为这些目录已经列入白名单,所以Git会在其子结构中查找要列入白名单的文件:

# Ignore the NuGet packages folder contents in the root of the repository...
/packages/**/*
# (whitelist directories to allow file exclusions later)
!/packages/**/
# ...except target files which may be required for msbuild.
!/packages/**/*.targets

答案 1 :(得分:0)

使用此文件:

/packages/**/*
!/packages/**/
!/packages/**/*.targets

<强>解释

当您忽略文件夹时,git根本不会检查该文件夹,因此您不能在以后忽略其中的任何文件。

由于您希望跟踪某些特定文件,而不是忽略文件夹本身,因此您应首先忽略文件夹中的所有文件,然后排除要跟踪的特定文件。