是否有一种方法可以忽略目录中同一类型的所有文件?
**显然对git毫无意义,所以这行不通:
/public/static/**/*.js
其思想是匹配任意嵌套文件夹。
是否有一种方法可以忽略目录中同一类型的所有文件?
**显然对git毫无意义,所以这行不通:
/public/static/**/*.js
其思想是匹配任意嵌套文件夹。
当前回答
要忽略未跟踪的文件,只需转到.git/info/exclude。Exclude是一个包含被忽略扩展名或文件列表的文件。
其他回答
从来没有尝试过,但是git help ignore建议如果你把.gitignore和*.js放在/public/static中,它会做你想做的事情。
注意:一定要看看下面Joeys的回答:如果你想忽略特定子目录中的文件,那么本地的.gitignore是正确的解决方案(局部性很好)。但是,如果您需要将相同的模式应用于整个回购,那么**解决方案会更好。
更新:看看@Joey的回答:Git现在支持模式中的**语法。这两种方法都可以正常工作。
gitignore(5)手册页声明:
从与路径相同目录的.gitignore文件中读取的模式,或在任何父目录中读取的模式,高级文件中的模式(直到工作树的顶层)将被低级别文件中的模式覆盖,直到包含该文件的目录。
这意味着在repo的任何给定目录中的.gitignore文件中的模式将影响该目录和所有子目录。
您提供的模式
/public/static/**/*.js
isn't quite right, firstly because (as you correctly noted) the ** syntax is not used by Git. Also, the leading / anchors that pattern to the start of the pathname. (So, /public/static/*.js will match /public/static/foo.js but not /public/static/foo/bar.js.) Removing the leading / won't work either, matching paths like public/static/foo.js and foo/public/static/bar.js. EDIT: Just removing the leading slash won't work either — because the pattern still contains a slash, it is treated by Git as a plain, non-recursive shell glob (thanks @Joey Hoer for pointing this out).
正如@ptyx所建议的,您需要做的是创建文件<repo>/public/static/。Gitignore,包括这个图案:
*.js
没有前导/,所以它将匹配路径的任何部分,并且该模式将只应用于/public/static目录及其子目录中的文件。
我认为最简单的解决方案是使用find。我不喜欢有多个。gitignore挂在子目录,我更喜欢管理一个唯一的,顶级的。gitignore。为此,您只需将找到的文件附加到.gitignore。假设/public/static/是你的项目/git home,我将使用如下代码:
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文件。
有关详细的学习,您可以访问:about git-ignore
在其他答案之上还有一些额外的建议(如果你幸运的话,问题是由其他原因引起的,这些建议可能会起作用):
确保忽略代码中大于100mb的文件 只需重新启动git工作流。删除本地的.git文件夹和git init,然后重试推到github。