我gitignore文件当前如下所示:
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
**/wwwroot/lib/
**/wwwroot/_references.js
**/wwwroot/app/**/*.js*
**/wwwroot/css/**/*.min.css
**/wwwroot/js/**/*.min.js
**/wwwroot/bundles/**/*.bundle.min.js
基本上,我想忽略中的所有文件wwwroot/lib/
目录与特定目录的LIB中的异常: /wwwroot/lib/file-tester
我怎样才能做到这一点跟.gitignore
? 我读过有关感叹号的语法,但它不工作,可能是由于忽略了排序。 我试了一下像下面这样:
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
**/wwwroot/lib/
!/wwwroot/lib/file-tester
**/wwwroot/_references.js
**/wwwroot/app/**/*.js*
**/wwwroot/css/**/*.min.css
**/wwwroot/js/**/*.min.js
**/wwwroot/bundles/**/*.bundle.min.js
但它没有工作。 任何帮助将不胜感激。
提前致谢!
首先,我不知道为什么你过度使用**。 如果你有一个目录/ wwwroot文件/ lib中,你可以忽略它只是:
/wwwroot/lib/
至于你的目录的否定,我想你只需要指定它是你指的是,与最后的结束反斜杠目录:
!/wwwroot/lib/file-tester/
这是行不通的,因为你排除整个/wwwroot/lib/
目录,而不是它的内容。 此目录忽略应该是这样的模式:
/wwwroot/lib/*
!/wwwroot/lib/file-tester
/ *救援
该目录的细微变化排除语法是有用的位置:
$ cat .gitignore
wwwroot/lib/*
!wwwroot/lib/file-tester
注意尾随/*
这是显著并告诉混帐排除lib文件夹里面的一切,但不是lib文件夹本身。 细微差别是,如果第一行是wwwroot/lib
,而不是,告诉混帐忽略wwwroot/lib
目录本身,然后没有“未排除”模式将产生什么影响。 相反,与尾随/*
,我们传达的git排除目录允许随后排除模式的工作内容。 我测试了这个工作,如下所示:
# Create a directory which should be excluded
$ mkdir -p wwwroot/lib/dir-to-exclude && touch wwwroot/lib/dir-to-exclude/empty.txt
# Now confirm that the above directory, file is not tracked by git
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
.gitignore
wwwroot/lib/file-tester/empty2.txt
(测试GIT中诉2.10.0)
检查该规则被排除文件
$ git check-ignore -v wwwroot/lib/dir-to-exclude
.gitignore:1:wwwroot/lib/* wwwroot/lib/dir-to-exclude
使用与目录排除的感叹号语法,你想什么来实现:
基本上,我想忽略的wwwroot / lib /目录中的所有文件与特定目录的LIB中的异常:/ wwwroot的/ lib目录/文件测试仪
不可能。
从https://git-scm.com/docs/gitignore :
可选的前缀“!” 该否定图案; 由以前的模式排除任何匹配的文件将再次成为包括在内。 这是不可能再有一个文件,如果该文件的父目录中排除。 Git不会列出性能原因排除的目录,所以在任何模式包含的文件有没有效果,无论在哪里,他们的定义。 把一个反斜杠(“\”)在第一前面的“!” 对于与文字“!”开头,例如模式“!重要的!.TXT”。
如果排除wwwroot/lib
,那么它是不再可能有任何的是做一个子目录!wwwroot/lib/file-tester
。 我已经在测试库测试这一点,可以证实这一点:
$ touch wwwroot/lib/file-tester/empty2.txt
$ cat .gitignore
!wwwroot/lib/file-tester
wwwroot/lib
$ git status
Untracked files:
.gitignore
$ vim .gitignore #Edited to remove wwwroot/lib
$ cat .gitignore
!wwwroot/lib/file-tester
$ git status
Untracked files:
.gitignore
wwwroot/lib/file-tester/empty2.txt
(这是所测试https://github.com/ajorpheus/git-ignore-test )请注意,只要wwwroot/lib
被移除时,该文件wwwroot/lib/file-tester/empty2.txt
开始被认可混帐作为一个未跟踪文件。
下面定义的作品。
**/wwwroot/lib
**/wwwroot/lib/*.*
文章来源: Exclude git ignore on one particular directory inside an already gitignored directory