.gitignore文件和其他地方的模式

时间:2016-05-14 18:19:06

标签: git gitignore

this link:

中找到以下两个引号

1)在DESCRIPTION

  
      
  • 从命令行读取的模式支持那些支持它们的命令。
  •   

2)在PATTERN FORMAT中(强调是我的):

  •   

    如果模式不包含斜杠/,Git会将其视为shell   glob模式并检查相对于路径名的匹配   .gitignore文件的位置(相对于。的顶层)   工作树,如果不是来自.gitignore文件)。

两个引号(上面用粗体字符表示的第二个)似乎是指SO中this answer中提到的 git ignore 命令(不是文件)。我在这里看到的问题是Pro Git book中甚至没有提到这个命令。因此,我对上述引言的解释可能是错误的。

我还有关于.gitignore文件的另一个问题,这与SO中的this comment有关,我将在下面重复:

You can put .gitignore anywhere in a git project - if a path starts with /, it will be relative to the location of the .gitignore file; otherwise it will refer recursively to files in the current directory and its descendant directories.

我无法看到如何从link given above中推断出这一点。

1 个答案:

答案 0 :(得分:0)

好的,所以似乎有一些误解。在pro git网站上关于gitignore的文章确实引用了.gitignore文件,而不是命令。另一个问题中提到的命令是不是 git的一部分,而是名为git extras的包。

在给予它更多的思考之后,我开始意识到我在这里开始感到困惑。您刚刚引用(部分)git评估忽略模式的顺序。在此订单的最顶部是patterns from the command line。这些都是内置和自定义(如在引用的答案中)处理git忽略模式的命令。

第二个引用最好用gitignore manpage底部的例子来解释。我在谈论:

  

$ git status
      [...]
      #未跟踪文件:
      [...]
      #Documentation / foo.html
      #Documentation / gitignore.html
      #file.o
      #lib.a
      #src / internal.o
      [...]
      $ cat .git / info / exclude
      #忽略树中任何地方的对象和档案       * [OA]
      $ cat Documentation / .gitignore
      #ignore生成的html文件,
      *。html的
      #除了用手维护的foo.html外       !foo.html
      $ git status
      [...]
      #未跟踪文件:
      [...]
      #Documentation / foo.html
      [...]

将gitignore文件放在项目的任何位置也是完全有效的,请再次参考official documentation on gitignore

  

Git通常会检查多个来源,具有以下优先顺序,从最高到最低:
   - 命令行
   - 相同目录中的.gitignore文件作为路径或任何父目录更高级别文件中的模式(最多工作树的顶层)被低级文件覆盖直到包含该文件的目录。这些模式相对于.gitignore文件的位置匹配。项目通常在其存储库中包含此类.gitignore文件,其中包含作为项目构建的一部分生成的文件的模式。

关于主要斜杠的部分将在以下段落中描述:

  

前导斜杠与路径名的开头匹配。例如," / *。c"匹配" cat-file.c"但不是" mozilla-sha1 / sha1.c"。

换句话说,模式通常被评估为glob后跟模式,并将匹配任何子目录中相对于.gitignore文件位置的任何路径。但是,如果模式以斜杠开头,则表示模式与相对路径名的开头完全匹配。