设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.42.1 → 2.49.0 无更改
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 无更改
-
2.41.0
2023-06-01
- 2.34.1 → 2.40.4 无更改
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 无更改
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 无更改
-
2.32.0
2021-06-06
- 2.22.2 → 2.31.8 无更改
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 无更改
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 无更改
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 无更改
-
2.16.6
2019-12-06
- 2.10.5 → 2.15.4 无更改
-
2.9.5
2017-07-30
- 2.5.6 → 2.8.6 无更改
-
2.4.12
2017-05-05
- 2.3.10 无更改
- 2.2.3 无更改
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
描述
gitignore
文件指定 Git 应忽略的有意未跟踪文件。 已被 Git 跟踪的文件不受影响;有关详细信息,请参见下面的注释。
gitignore
文件中的每一行都指定一个模式。 在决定是否忽略路径时,Git 通常会从多个来源检查 gitignore
模式,优先级顺序如下,从最高到最低(在一个优先级级别内,最后一个匹配的模式决定结果)
-
从命令行读取的模式,用于支持这些命令的命令。
-
从与路径相同的目录或任何父目录(直到工作树的顶层)中的
.gitignore
文件中读取的模式,其中较高级别文件中的模式被较低级别文件中的模式覆盖,直到包含该文件的目录。 这些模式相对于.gitignore
文件的位置匹配。 项目通常在其存储库中包含此类.gitignore
文件,其中包含作为项目构建一部分生成的文件模式。 -
从
$GIT_DIR/info/exclude
读取的模式。 -
从配置变量
core.excludesFile
指定的文件中读取的模式。
将模式放在哪个文件中取决于模式的预期用途。
-
应进行版本控制并通过克隆分发到其他存储库的模式(即,所有开发人员都希望忽略的文件)应放入
.gitignore
文件中。 -
特定于某个特定存储库但不需要与其他相关存储库共享的模式(例如,位于存储库内部但特定于某个用户工作流程的辅助文件)应放入
$GIT_DIR/info/exclude
文件中。 -
用户希望 Git 在所有情况下都忽略的模式(例如,用户选择的编辑器生成的备份文件或临时文件)通常会放入用户
~/.gitconfig
中的core.excludesFile
指定的文件中。 它的默认值为 $XDG_CONFIG_HOME/git/ignore。 如果 $XDG_CONFIG_HOME 未设置或为空,则改用 $HOME/.config/git/ignore。
底层 Git 管道工具,例如 *git ls-files* 和 *git read-tree*,读取由命令行选项指定的 gitignore
模式,或从由命令行选项指定的文件中读取。 更高级别的 Git 工具,例如 *git status* 和 *git add*,使用来自上述来源的模式。
模式格式
-
空行不匹配任何文件,因此可以作为可读性的分隔符。
-
以 # 开头的行用作注释。 对于以井号开头的模式,请在第一个井号前放置反斜杠 ("
\
")。 -
除非用反斜杠 ("
\
") 引用,否则将忽略尾随空格。 -
可选前缀 "
!
",用于否定该模式;先前模式排除的任何匹配文件都将再次包含。 如果排除该文件的父目录,则无法重新包含文件。 出于性能原因,Git 不会列出排除的目录,因此无论在哪里定义,包含的文件上的任何模式均无效。 对于以文字 "!
" 开头的模式,请在第一个 "!
" 前放置反斜杠 ("\
"),例如 "\!important!.txt
"。 -
斜杠 "
/
" 用作目录分隔符。 分隔符可以出现在.gitignore
搜索模式的开头、中间或结尾。 -
如果在模式的开头或中间(或两者)存在分隔符,则该模式相对于特定
.gitignore
文件本身的目录级别。 否则,该模式也可能在.gitignore
级别以下的任何级别匹配。 -
如果在模式末尾存在分隔符,则该模式将仅匹配目录,否则该模式可以同时匹配文件和目录。
-
例如,模式
doc/frotz/
匹配doc/frotz
目录,但不匹配a/doc/frotz
目录;但是frotz/
匹配frotz
和a/frotz
(这是一个目录)(所有路径都相对于.gitignore
文件)。 -
星号 "
*
" 匹配任何内容,但斜杠除外。 字符 "?
" 匹配任何一个字符,但 "/
" 除外。 范围表示法(例如[a-zA-Z]
)可用于匹配范围中的一个字符。 有关更详细的说明,请参见 fnmatch(3) 和 FNM_PATHNAME 标志。
在与完整路径名匹配的模式中,两个连续的星号 ("**
") 可能具有特殊含义
-
以 "
**
" 开头,后跟一个斜杠表示匹配所有目录。 例如,"**/foo
" 匹配任何地方的文件或目录 "foo
",与模式 "foo
" 相同。 "**/foo/bar
" 匹配直接位于目录 "foo
" 下的任何地方的文件或目录 "bar
"。 -
尾随 "
/**
" 匹配内部的所有内容。 例如,"abc/**
" 匹配目录 "abc
" 内的所有文件,相对于.gitignore
文件的位置,具有无限深度。 -
斜杠后跟两个连续的星号,然后一个斜杠匹配零个或多个目录。 例如,"
a/**/b
" 匹配 "a/b
"、"a/x/b
"、"a/x/y/b
" 等。 -
其他连续的星号被视为常规星号,并将根据先前的规则进行匹配。
配置
可选配置变量 core.excludesFile
指示包含要排除的文件名模式的文件路径,类似于 $GIT_DIR/info/exclude
。 排除文件中的模式除了 $GIT_DIR/info/exclude
中的模式外,还使用。
注释
gitignore 文件的目的是确保 Git 未跟踪的某些文件保持未跟踪状态。
要停止跟踪当前正在跟踪的文件,请使用 *git rm --cached* 从索引中删除该文件。 然后可以将文件名添加到 .gitignore
文件,以防止该文件在以后的提交中重新引入。
当从工作树中访问 .gitignore
文件时,Git 不会遵循符号链接。 这使行为在从索引或树访问文件与从文件系统访问文件时保持一致。
示例
-
模式
hello.*
匹配名称以hello.
开头的任何文件或目录。 如果只想将其限制为目录而不限制为其子目录,则可以在模式前添加斜杠,即/hello.*
;该模式现在匹配hello.txt
、hello.c
,但不匹配a/hello.java
。 -
模式
foo/
将匹配目录foo
及其下的路径,但不会匹配常规文件或符号链接foo
(这与 pathspec 在 Git 中的工作方式一致) -
模式
doc/frotz
和/doc/frotz
在任何.gitignore
文件中都具有相同的效果。 换句话说,如果模式中已经有中间斜杠,则前导斜杠无关紧要。 -
模式
foo/*
,匹配foo/test.json
(一个常规文件),foo/bar
(一个目录),但不匹配foo/bar/hello.c
(一个常规文件),因为模式中的星号不匹配bar/hello.c
,其中包含斜杠。
$ git status [...] # Untracked files: [...] # Documentation/foo.html # Documentation/gitignore.html # file.o # lib.a # src/internal.o [...] $ cat .git/info/exclude # ignore objects and archives, anywhere in the tree. *.[oa] $ cat Documentation/.gitignore # ignore generated html files, *.html # except foo.html which is maintained by hand !foo.html $ git status [...] # Untracked files: [...] # Documentation/foo.html [...]
另一个例子
$ cat .gitignore vmlinux* $ ls arch/foo/kernel/vm* arch/foo/kernel/vmlinux.lds.S $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore
第二个 .gitignore 阻止 Git 忽略 arch/foo/kernel/vmlinux.lds.S
。
排除除特定目录 foo/bar
之外的所有内容的示例(请注意 /*
- 如果没有斜杠,通配符也会排除 foo/bar
中的所有内容)
$ cat .gitignore # exclude everything except directory foo/bar /* !/foo /foo/* !/foo/bar
GIT
属于 git[1] 套件的一部分