Git忽略*~和这些其他模式的含义是什么?

Git忽略*~和这些其他模式的含义是什么?,git,gitignore,Git,Gitignore,我无意中发现了它,无法理解它。特别是第一行*~,第二行也是 以下是供快速参考的完整内容: *~ \#*\# *.swp tmp/* private/**/* public/cache .DS_Store .#* example_presentation.html 请解释一下。在哪里可以找到gitignore使用的模式的详细语法(除了手册页) 我已经尝试过手册页,但遗憾的是,我发现其中的模式描述没有那么有用。因此问题就来了。*~匹配任何以~结尾的文件名。一些文本编辑器创建以~结尾的文件,作为自动

我无意中发现了它,无法理解它。特别是第一行
*~
,第二行也是

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

*~
\#*\#
*.swp
tmp/*
private/**/*
public/cache
.DS_Store
.#*
example_presentation.html
请解释一下。在哪里可以找到gitignore使用的模式的详细语法(除了手册页)


我已经尝试过手册页,但遗憾的是,我发现其中的模式描述没有那么有用。因此问题就来了。

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

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

第一个类匹配项目不需要的文件,因为这些文件是由工具生成的,供自己使用或作为所修改文件的备份

第二个类匹配项目所需的文件,但这些文件要么是由项目代码生成的,要么是包含敏感信息(即密码)和配置设置的配置文件,这些信息取决于项目运行的计算机

您发布的模式:

  • 备份、临时文件等:

    • *~
      -以
      ~
      结尾的文件名-它们由OSX和Linux上的一些编辑器创建为备份副本;Windows软件通常将文件扩展名替换为
      .bak
      (或附加文件扩展名)
    • \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
      开头的行用作注释。对于以哈希开头的模式,在第一个哈希前面放一个反斜杠(
      “\”
      )——这意味着第二个
      不需要转义

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

    • *.swp
      -用于检测两个编辑器实例同时编辑文件的临时文件
    • .DS_Store
      ——OSX Finder在每个目录中创建的文件;它们包含内部簿记(缩略图、排序顺序等)
    • .*
      -名称以
      .
      开头的文件;我不知道有哪个应用程序会生成它们;对锁定文件使用
      .*
      来检测同步编辑(感谢@TobySpeight);无需退出
      #
      ,请参见上文
  • 项目使用但存储库中不需要的文件:

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

  • 这些模式是标准的glob模式;请参阅
    glob(7)
    手册页:

    • (不在括号内)匹配任何单个字符
    • *
      (不在括号内)匹配任何字符串,包括空字符串
    • 表达式
      […]
      中,前导
      [
      后面的第一个字符不是
      匹配单个字符,即括号中包含的任何字符。括号中包含的字符串不能为空;因此可以在 括号,前提是它是第一个字符。(因此,
      [[!]
      匹配三个字符
      [
      ]
    • 有一个特殊约定:两个字符之间用
      -
      分隔表示一个范围。(因此,
      [A-Fa-f0-9]
      相当于
      [ABCDEFabcdef0123456789]
      )可以将
      -
      作为括号中的第一个或最后一个字符,从而将其包含在字面意义中。(因此,
      []-]
      只匹配两个字符
      ]
      -
      [--0]
      匹配三个字符
      -
      0
      ,因为
      //code>无法匹配。)
    • 表达式
      [!…]
      匹配单个字符,即任何与通过删除第一个
      获得的表达式不匹配的字符从它。(因此,
      [!]a-]
      匹配除
      ]
      a
      -
      之外的任何单个字符)
    通过在
    *
    [
    前面加一个反斜杠,可以删除它们的特殊含义。在括号中,这些字符代表它们自己。因此,
    [?*\]
    匹配这四个字符
    [
    *
    \


    第一行是忽略以波浪号(
    ~
    )结尾的任何内容,第二行是忽略以
    \\
    .Double glob(
    ***
    )开头或结尾的任何内容表示所有目录中的匹配,换句话说,忽略所有目录/子目录中匹配的任何内容。只是好奇:我认为
    必须在
    中转义。gitignore
    因此解释了
    \\\\\\\\\\\\\\\\\\\\\\\\\\\
    中为什么不转义