我遇到一个问题,当文件是忽略目录下面的多个子目录时,gitignore(!fileName.txt)的异常语法不起作用。
例如:
web/[Ee]xample.[Ww]eb/[Ss]itecore/*
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/32x32*
不包含文件夹32x32中的文件 我必须通过命令行手动添加它们,如下所示:
git add -f -r web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/32x32
有没有办法在这种情况下使用异常运算符?
答案 0 :(得分:2)
重新包含“被忽略的目录下面的多个子目录”的文件(当你尝试时)不起作用,因为“如果排除该文件的父目录,则无法重新包含文件”[ source]。
作为一种丑陋但有效的解决方法,在重新包含所需文件之前,重新包含路径中的所有父目录,同时通过重新排除这些目录来保留这些父目录中的文件。
对于您的示例,它如下所示:
web/[Ee]xample.[Ww]eb/[Ss]itecore/*
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/**
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/**
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/**
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/**
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/32x32*
来源:我的相关答案here。
或者,您可以使用放置在文件目录中的.gitignore文件来重新包含[more here]。根据口味,这可能是更漂亮的解决方案。