git之.gitignore文件详解

参考:git-book

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表

通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。

.gitignore文件的作用总结

.gitignore文件用来忽略被指定的文件或文件夹的改动,被记录在.gitignore文件里的文件或文件夹,是无法被git跟踪到的,即被忽略的文件是不会被放入到远程仓库里的。如果文件已经存在于远程仓库中,是无法通过.gitignore文件来忽略的。

.gitignore文件的创建

.gitignore 文件存放于git仓库的根目录下。

linux / mac 下在命令行创建/删除 .gitignore 文件命令如下:

touch .gitignore # 新建
rm -f .gitignore # 删除

windows 系统 win10 以前的版本可能无法直接用视图菜单创建/删除以 . 号开头的文件,需要在命令行操作:

:: 创建
TYPE NUL>.gitignore
:: 删除
DEL /F .gitignore

.gitignore 文件的格式规范(语法)

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 以叹号!表示不忽略(跟踪)匹配到的文件或目录。

glob 模式是指 shell 所使用的简化了的正则表达式。

  1. 星号(*)匹配零个或多个任意字符;
  2. 问号(?)只匹配一个任意字符;
  3. [ ]表示匹配中括号内的单个字符:
    (1) [abc] 要么匹配一个 a,要么匹配一个 b,要么匹配一个 c
    (2) 可以使用-来表示连贯的字符,比如0-9a-zA-Z等,[0-9]表示匹配从0到9的单个字符。
    (3) 可以使用^来表示除外,比如[^0-9]表示除0到9之外的单个字符。
  4. 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。

.gitignore 文件示例

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹,等价于 build/*.*
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

.gitignore文件使用的注意事项

  1. 在首次提交正式数据前,先创建提交 .gitignore 文件到本地库(再推送到远程库)。
    注意: 在git早期版本中,只有先提交 .gitignore 文件到本地库后,才能对提交的正式数据采用过滤规则(在 git2.+ 以上版本中无需先提交.gitignore 文件,只要保证在首次添加/提交正式数据前 .gitignore 文件已存在且设置好过滤规则,但为了标准化 git 的操作,建议先提交推送 .gitignore 到远程库)。
  2. 对在添加 .gitignore之前,已提交到本地库(或推送到远程库的数据),不会受到过滤规则的影响。
    因而必须先提交、推送 .gitignore
  3. 在提交、推送 .gitignore 之后,需要更新它的过滤规则,必须先修改/提交/推送到远程库后,再提交正式数据,防止不必要的数据的提交。
(完)

你可能感兴趣的:(git,.gitignore,glob模式,正则表达式,git忽略文件)