在排除某一特定目录的git忽略已经gitignored目录中(Exclude git ignore

2019-09-29 18:47发布

我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

但它没有工作。 任何帮助将不胜感激。

提前致谢!

Answer 1:

首先,我不知道为什么你过度使用**。 如果你有一个目录/ wwwroot文件/ lib中,你可以忽略它只是:

/wwwroot/lib/

至于你的目录的否定,我想你只需要指定它是你指的是,与最后的结束反斜杠目录:

!/wwwroot/lib/file-tester/


Answer 2:

这是行不通的,因为你排除整个/wwwroot/lib/目录,而不是它的内容。 此目录忽略应该是这样的模式:

/wwwroot/lib/*
!/wwwroot/lib/file-tester


Answer 3:

/ *救援

该目录的细微变化排除语法是有用的位置:

$ 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开始被认可混帐作为一个未跟踪文件。



Answer 4:

下面定义的作品。

**/wwwroot/lib
**/wwwroot/lib/*.*


文章来源: Exclude git ignore on one particular directory inside an already gitignored directory