.gitignore 文件语法介绍

.gitignore 文件的作用

A gitignore file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected; see the NOTES below for details.

.gitignore 文件指定了一组未被跟踪的文件,这些文件应该被 Git 程序忽略(即,git status 时,不再提示这些文件尚未被跟踪)。如果文件已经被 Git 程序跟踪,则这些文件不会受到 .gitignore 的影响。

.gitignore 的文件结构和语法

.gitignore 是一个纯文本文件,文件中的每一行都代表一个匹配模式(pattern)。GIT 从上至下读取文件,后面行的优先级大于前面行。

匹配模式

  • 空行:无意义,可以作为分隔行,增加可读性(readability);
  • #开头: 注释。注意:# 必须为行的第一个字符。如果行要以 # 开头,需要在 # 之前插入一个 \,即,\#
  • 行首空格不会被忽略,因为文件名中可以包含空格;
  • 行尾空格会被忽略,如果想包含行尾空格,则需要在每个行尾空格之前插入一个 \
  • !(取反操作): 如果文件被前面的模式排除,但又匹配了 ! 后面的模式,则该文件将再次被包含进来;
  • /(目录分隔符): 目录分隔符可以出现在行首、行中、行尾,
    • 行首:/foo
    • 行中:foo/bar
    • 行尾:foo/
  • *通配符: 可以匹配任意长度的任意字符串(字符串中不能包含 /);
  • **通配符: 可以匹配任意长度的任意字符串(字符串中可以包含 /);
  • ?通配符: 可以匹配长度为 1 的任意字符串(字符串中不能包含 /);
  • 范围通配符: 如 [a-zA-Z],可以匹配长度为 1 的只包含英文字母的字符串;
  • 如果模式匹配了文件夹,也相当于匹配了文件夹的所有文件;

/ 的一些说明

  • 行尾:如果 / 出现在行尾,则 匹配模式 只会匹配文件夹,而不会匹配文件。
    比如,foo 会匹配所有名称是 foo 的文件和文件夹,而 foo/ 只会匹配所有名称是 foo 的文件夹。

  • 行首和行中:如果 / 出现在行首和行中,则 匹配模式 会以 .gitignore 所在的目录为基准,对所有的相对路径进行匹配(相较于之前,只看文件或者文件夹的名称)。
    比如 /foo, 会匹配 foo,但是不会匹配 bar/foo

一些例子

例子一

匹配模式 说明
foo.* 匹配所有以 foo. 开头的文件,如,foo.cfoo.java
!foo/bar 不匹配 foo/bar 文件或者文件夹
foo/**/bar 匹配 foo 文件夹下的中以 bar 开头的文件或者文件夹

例子二

文件夹结构

.
├── foo1
│   └── foo2
│       └── a.txt
└── foo2
    └── b.txt

.gitignore 文件内容(1)

.*
/foo2

git status 输出结果(1)

On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	foo1/

nothing added to commit but untracked files present (use "git add" to track)

.gitignore 文件内容(2)

.*
foo2

git status 输出结果(2)

On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

参考

posted @ 2023-01-28 15:03  Revc  阅读(468)  评论(1编辑  收藏  举报