Gitignore目录中所有扩展的文件

是否有一种方法可以忽略目录中同一类型的所有文件?

**显然对git没有意义,所以这行不通:

/public/static/**/*.js

其思想是匹配任意嵌套文件夹。

293302 次浏览

从未尝试过,但git help ignore建议,如果你在/public/static中放入.gitignore*.js,它将实现你想要的效果。

注意:一定要看看下面Joeys的回答:如果你想忽略特定子目录中的文件,那么本地的.gitignore是正确的解决方案(局部性很好)。但是,如果您需要将相同的模式应用于整个回购,那么**解决方案会更好。

更新:看看@Joey的回答: Git现在在模式中支持**语法。这两种方法都可以正常工作。


Gitignore(5)手册页声明:

从与路径相同目录的.gitignore文件中读取的模式,或在任何父目录中读取的模式,高级文件中的模式(直到工作树的顶层)将被低级别文件中的模式覆盖,直到包含该文件的目录。

这意味着在repo的任何给定目录中的.gitignore文件中的模式将影响该目录所有子目录

您提供的模式

/public/static/**/*.js

不是很正确,首先是因为(正如你所正确指出的)Git不使用**语法。而且,前导/将该模式锚定到路径名的开头。(所以,/public/static/*.js将匹配/public/static/foo.js /public/static/foo/bar.js.) 删除前导__ABC1也不行,只能匹配像__ABC6和foo/public/static/bar.js这样的路径。编辑:仅仅删除前导斜杠也不行——因为模式仍然包含斜杠,Git将它视为普通的、非递归的shell glob(感谢/0指出这一点)。

正如@ptyx所建议的,你需要做的是创建文件<repo>/public/static/.gitignore,并只包括以下模式:

*.js

没有前导/,所以它将匹配路径的任何部分,并且该模式将只应用于/public/static目录及其子目录中的文件。

要忽略未跟踪的文件,只需转到.git/info/exclude。Exclude是一个包含被忽略扩展名或文件列表的文件。

根据的文档,从1.8.2.1版本开始,git似乎支持**语法。

在匹配完整路径名的模式中,两个连续的星号("**")可能具有特殊含义:

  • 开头的“**”后面跟一个斜杠表示在所有目录中匹配。为 例如,"**/foo"匹配文件或目录"foo"的任何位置,相同 作为模式“foo”。"**/foo/bar"匹配"bar"文件或目录

  • .在"foo"目录下的任意位置
  • A后面的"/**"匹配里面的所有内容。例如,"abc/**" 匹配目录"abc"内的所有文件,相对于

  • . .gitignore文件,无限深度
  • 一个斜杠后跟两个连续的星号,然后一个斜杠匹配 零或多个目录。例如,"a/**/b"匹配"a/b", "a/x/b", "a/x/y/b"等等。

  • .
  • 其他连续的星号被认为无效。

我相信最简单的解决方案是使用find。我不喜欢在子目录中有多个.gitignore,我更喜欢管理一个唯一的顶级.gitignore。要做到这一点,你只需将找到的文件附加到你的.gitignore。假设/public/static/是你的项目/git的家,我将使用这样的东西:

find . -type f -name *.js | cut -c 3- >> .gitignore

我发现在开始的时候去掉./对于git理解要避免哪些文件通常是必要的。因此,cut -c 3-.;

我已经尝试在我的vscode中打开.gitignore文件,windows 10。在这里,您可以看到一些先前添加的忽略文件(如果有的话)。

要创建一个新规则来忽略扩展名为(.js)的文件,可以像这样追加文件的扩展名:

*.js

这将忽略你的git存储库中的所有.js文件。

要从特定目录中排除特定类型的文件,你可以添加这个:

**/foo/*.js

这将忽略/foo/目录下的所有.js文件。

有关详细的学习,您可以访问:关于git-ignore

在其他答案之上还有一些额外的建议(如果你幸运的话,问题是由其他原因引起的,这些建议可能会起作用):

  1. 确保忽略代码中大于100mb的文件
  2. 只需重新启动git工作流。删除本地的.git文件夹和git init,然后重试推到github。

正如其他答案已经说过的,像**/*.exe这样的模式将忽略存储库中任何地方的所有.exe文件。

然而,许多人(像我一样)在排除故障时必然会遇到这个问题…< br > 为什么这不是工作

因此,命令git status或你的IDE可能会告诉你xyz.exe即将被提交,你可能会把头撞到墙上,试图弄清楚为什么会这样,因为你的.gitignore文件中确实有**/*.exe,而且这个问答确认了这实际上是正确的魔法咒语,这应该会阻止这种情况。但事实并非如此。

你在这种荒谬的情况下的实际原因是你(或者,更有可能是你的IDE自动为你)已经上演了那个文件。

解决方案是首先取消它,然后它将被忽略。

< p > <子> <rant> “分期区”;是git的一个完全无用的特性,它是痛苦的主要来源,没有任何好处可言;然而,它是git如何工作的核心,所以您必须始终了解它。不同的ide采用不同的方法:Visual Studio迫使你处理分期,这就是为什么在Visual Studio中使用git是一个主要的痛苦和非常糟糕的用户体验的原因之一。IntelliJ IDEA为您处理后台staging(它应该这样做),因此您不必为它所困扰,甚至不必意识到它的存在,这就是为什么在IntelliJ IDEA中使用git是一种乐趣的原因之一。不幸的是,没有什么是完美的,所以不可避免地,每隔一段时间就会有痛苦,即使是IntelliJ IDEA。 </rant> < / sub > < / p >