gitignore *〜和其他这些模式的含义是什么?

时间:2016-07-12 19:57:00

标签: git gitignore

我遇到了this .gitignore file并且无法理解。特别是第一行*~和第二行。

以下是完整内容供快速参考:

*~
\#*\#
*.swp
tmp/*
private/**/*
public/cache
.DS_Store
.#*
example_presentation.html

请解释一下。在哪里可以找到gitignore使用的模式的详细语法(除了手册页)?

我已经尝试过的人的页面,但很可惜,我发现模式的描述有不那么有用。因此问题。

3 个答案:

答案 0 :(得分:5)

.gitignore文件中有两类表达式:与临时文件匹配的表达式,开发工具使用的备份文件或文件以及与项目中的文件匹配的表达式。

第一个类匹配项目不需要的文件,因为它们是由工具生成的,可供自己使用,也可作为他们修改的文件的备份。

第二个类匹配项目所需的文件,但它们或者由项目代码生成,或者是包含敏感信息(即密码)的配置文件,以及依赖于项目运行的计算机的配置设置。 / p>

您发布的模式:

  1. 备份,临时文件等:

    • *~ - 以~结尾的文件名 - 它们由OSX和Linux上的一些编辑者创建为备份副本; Windows软件通常用.bak替换文件扩展名(或附加它);
    • \#*\# - 引自documentation of .gitignore“以#开头的一行作为评论。请加上反斜杠("\")以散列开头的模式的第一个散列的前面。“ - 这意味着第二个#不需要转义。

      我不知道哪个软件会生成名称以#开头和结尾的文件,但很可能是临时文件;

    • *.swp - vi用于检测两个编辑器实例同时编辑文件的临时文件;
    • .DS_Store - OSX Finder在每个目录中创建的文件;它们包含内部的bookeeping(缩略图,排序顺序等);
    • .#* - 名称以.#开头的文件; 我不知道任何生成它们的应用程序; Emacs使用.#*来锁定文件以检测同时编辑(感谢@TobySpeight);没有必要逃避#,见上文;
  2. 项目使用但存储库中不需要的文件:

    • tmp/* - 许多Web应用程序在名为tmpvar/tmp或类似的目录中生成临时文件;
    • public/cache - public目录是通过Web服务器可见的项目部分; cache子目录可能包含生成的文件(fe连接和缩小的脚本和CSS文件) - 它们需要从外部(公共)可见而无需其他处理但在存储库中不需要,因为它们在运行时生成;
    • private/**/*example_presentation.html - 这两个太具体了;只有你的项目可以解释为什么存储库应该忽略它们。

答案 1 :(得分:0)

*~匹配以~结尾的任何文件名。某些文本编辑器创建以~结尾的文件作为自动保存以进行备份。忽略这些文件是有意义的。

答案 2 :(得分:0)

模式是标准的圆形图案;请参阅glob(7)手册页:

  
      
  • ? (不在括号内)匹配任何单个字符。
  •   
  • * (不在括号内)匹配任何字符串,包括空字符串。
  •   
  • 表达式 [...] ,其中前导[之后的第一个字符不是!与单个字符匹配,即由该字符包围的任何字符括号。括号括起来的字符串不能为空;因此{...}}之间可以允许{。}}      括号,只要它是第一个字符。 (因此,]匹配三个字符[][!][]。)
  •   
  • 有一个特殊约定:由!分隔的两个字符表示范围。 (因此,-相当于[A-Fa-f0-9]。)通过将[ABCDEFabcdef0123456789]作为括号中的第一个或最后一个字符,可以在其字面意义中包含-。 (从而,      []-]仅匹配两个字符]-[--0]匹配三个字符-.0,因为/无法匹配。)
  •   
  • 表达式 [!...] 匹配单个字符,即通过从中删除第一个!获得的表达式不匹配的任何字符。 (因此,[!]a-]匹配除]a-之外的任何单个字符。)
  •   
     

可以通过反斜杠删除?*[的特殊含义。在括号之间,这些字符代表自己。因此,[[?*\]匹配四个字符          [?*\