我试图让git忽略整个packages
目录,除了它里面的.targets
文件,无论它们在哪里。我在.gitignore
中尝试此操作但是git仍然忽略整个packages
目录,尽管存在.targets
个文件:
/packages/*
!/packages/**/*.targets
我还尝试过另一个SO问题和非黑名单目录的建议,但它仍然没有工作(这次,它只包括所有的dir包):
/packages/*
!/packages/**/
!/packages/**/*.targets
我怎样才能让它发挥作用?
答案 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根本不会检查该文件夹,因此您不能在以后忽略其中的任何文件。
由于您希望跟踪某些特定文件,而不是忽略文件夹本身,因此您应首先忽略文件夹中的所有文件,然后排除要跟踪的特定文件。