我的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
但它没有用。任何帮助将不胜感激。
提前致谢!
答案 0 :(得分:0)
首先,我不确定你为何过度使用**。如果你有一个目录/ wwwroot / lib,你可以忽略它:
/wwwroot/lib/
至于你对目录的否定,我认为你只需要指定它是你所指的目录,结尾是反斜杠:
!/wwwroot/lib/file-tester/
答案 1 :(得分:0)
它不起作用,因为您排除了整个/wwwroot/lib/
目录而不是它的内容。忽略此目录的模式应如下所示:
/wwwroot/lib/*
!/wwwroot/lib/file-tester
答案 2 :(得分:0)
目录排除语法的细微变化在这里很有用:
$ cat .gitignore
wwwroot/lib/*
!wwwroot/lib/file-tester
注意尾随/*
是重要的,并告诉git排除lib文件夹中的所有内容,但不排除lib文件夹本身。细微差别在于,如果第一行是wwwroot/lib
,则告诉git忽略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 v.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 / file-tester
是不可能的。
来自https://git-scm.com/docs/gitignore:
可选前缀"!"否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。 如果排除该文件的父目录,则无法重新包含文件。由于性能原因,Git不会列出排除的目录,因此所包含文件的任何模式都无效,无论如何他们被定义的地方。在第一个"!"前面放一个反斜杠(" \")对于以文字"!"开头的模式,例如"!important!.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
就会被git识别为未跟踪的文件。
答案 3 :(得分:0)
以下定义有效。
**/wwwroot/lib
**/wwwroot/lib/*.*