有没有办法忽略目录中所有类型的文件?
**
git显然毫无意义,所以这不起作用:
/public/static/**/*.js
Run Code Online (Sandbox Code Playgroud)
这个想法是匹配任意嵌套文件夹.
joe*_*oer 189
根据文档,似乎版本**
支持该语法.git
1.8.2.1
**
与完整路径名匹配的两个连续星号(" ")可能具有特殊含义:
**
前面带有斜杠的" "表示所有目录中的匹配.例如,"**/foo
"将文件或目录" "匹配foo
在任何地方,与模式"foo
" 相同."**/foo/bar
"匹配文件或目录"bar
"直接位于目录"foo
" 下的任何位置.尾随"
/**
"匹配内部的一切.例如,"abc/**
"匹配目录"abc
" 内的所有文件,相对于.gitignore
文件的位置,具有无限深度.斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录.例如,"
a/**/b
"匹配"a/b
","a/x/b
","a/x/y/b
"等.其他连续星号被视为无效.
pty*_*tyx 108
从来没有尝试过,但git help ignore
暗示,如果你把一个.gitignore
用*.js
在/public/static
,它会做你想要什么.
注意:请务必查看以下Joeys的答案:如果您想忽略特定子目录中的文件,那么本地.gitignore是正确的解决方案(位置很好).但是,如果您需要相同的模式应用于整个回购,那么**解决方案更好.
Ada*_*arp 63
更新:看看@Joey的答案:Git现在支持**
模式中的语法.这两种方法都应该可行.
该gitignore(5)手册页中指出:
从与路径相同的目录中的.gitignore文件读取的模式,或在任何父目录中读取的模式,更高级别文件中的模式(直到工作树的顶层)被低级文件中的模式覆盖到目录包含文件.
这意味着.gitignore
repo的任何给定目录中的文件中的模式将影响该目录和所有子目录.
你提供的模式
/public/static/**/*.js
Run Code Online (Sandbox Code Playgroud)
是不是很正确,首先是因为(正如你正确指出的那样)**
Git没有使用语法.此外,/
模式到路径名开头的主要锚点.(所以,/public/static/*.js
匹配/public/static/foo.js
但不 匹配/public/static/foo/bar.js
.)删除前导编辑:只删除前导斜杠也不会 - 因为模式仍然包含斜杠,它被Git视为一个普通的,非递归的shell glob(感谢@Joey Hoer指出这一点)./
也不起作用,匹配路径,如public/static/foo.js
和foo/public/static/bar.js
.
正如@ptyx建议的那样,您需要做的是创建文件<repo>/public/static/.gitignore
并仅包含此模式:
*.js
Run Code Online (Sandbox Code Playgroud)
没有前导/
,因此它将在路径的任何部分匹配,并且该模式将仅应用于/public/static
目录及其子目录中的文件.
小智 10
要忽略未跟踪的文件,只需转到.git/info/exclude.Exclude是一个包含已忽略的扩展名或文件列表的文件.
小智 8
我试过.gitignore
在我的 vscode 中打开文件,windows 10
. 在那里您可以看到,一些先前添加的忽略文件(如果有)。
要创建一个新规则来忽略带有(.js)
扩展名的文件,请像这样附加文件的扩展名:
*.js
Run Code Online (Sandbox Code Playgroud)
这将忽略存储库中的所有.js
文件git
。
要从特定目录中排除某些类型的文件,您可以添加以下内容:
**/foo/*.js
Run Code Online (Sandbox Code Playgroud)
这将仅忽略 /foo/ 目录中的所有 .js 文件。
详细学习可以访问:关于 git-ignore
正如其他答案已经说过的那样,类似的模式**/*.exe
将忽略.exe
存储库中任何位置的所有文件。
然而,许多人(像我一样)在排除故障时必然会遇到这个问题......
为什么这不起作用。
因此,命令git status
或你的 IDE 可能会告诉你xyz.exe
即将提交,你可能会用头撞墙试图找出为什么会这样,因为你**/*.exe
的 .gitignore 文件中确实有这样的内容,并且因为这个问答确认这实际上是正确的魔法咒语,应该可以防止这种情况发生。但事实并非如此。
您处于这种荒谬情况的实际原因是您(或者更可能的是,您的 IDE 自动为您)已经暂存了该文件。
解决方案是先将其取消暂存,然后它将被忽略。
<rant>
“暂存区”是 git 的一个完全无用的功能,它是一个主要的痛苦来源,没有任何值得一提的好处;然而,它是 git 工作原理的核心,所以你必须时刻意识到它。不同的 IDE 采取不同的方法:Visual Studio 强制您处理暂存问题,这就是为什么在 Visual Studio 中使用 git 是一件非常痛苦的事情,并且用户体验非常差的原因之一。IntelliJ IDEA 会在幕后为您处理暂存(正如它应该的那样),因此您不必被它打扰,甚至不必知道它的存在,这就是为什么在 IntelliJ IDEA 中使用 git 是一种方便的原因之一。乐趣。不幸的是,没有什么是完美的,所以不可避免地,偶尔会出现痛苦,即使使用 IntelliJ IDEA 也是如此。
</rant>
我相信最简单的解决方案是使用find
. 我不喜欢.gitignore
在子目录中存在多个,我更喜欢管理一个独特的顶级.gitignore
. 为此,您只需将找到的文件附加到您的.gitignore
. 假设这/public/static/
是你的项目/git home 我会使用类似的东西:
find . -type f -name *.js | cut -c 3- >> .gitignore
Run Code Online (Sandbox Code Playgroud)
./
我发现,为了让 git 了解要避免哪些文件,通常需要在开头删除。因此cut -c 3-
.
归档时间: |
|
查看次数: |
157279 次 |
最近记录: |