设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理员
指南
管理
管道命令
- 2.42.1 → 2.44.0 无更改
- 2.42.0 08/21/23
- 2.41.0 06/01/23
- 2.34.1 → 2.40.1 无更改
- 2.34.0 11/15/21
- 2.33.1 → 2.33.8 无更改
- 2.33.0 08/16/21
- 2.32.1 → 2.32.7 无更改
- 2.32.0 06/06/21
说明
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 不会列出被排除的目录,因此对包含文件的任何模式都没有影响,无论它们在何处定义。对于以字面 “!
” 开头的模式,在第一个 “!
” 前加上反斜杠 (“\
”),例如 “\!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/**
”匹配相对于.gitignore
文件位置的目录“abc
”中的所有文件,深度无限。 -
一个斜杠后跟连续两个星号,再后跟一个斜杠,匹配零个或多个目录。例如,“
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
文件中,以阻止该文件在以后的提交中重新引入。
Git 在访问工作树中的 .gitignore
文件时不会遵循符号链接。当从索引或树中访问文件与从文件系统中访问文件时,这会保持行为一致。
示例
-
模式
hello.*
匹配任何以hello.
开头的文件或目录。如果只想将其限制在目录中,而不在其子目录中,可以在模式前加上斜杠,即/hello.*
;现在,该模式匹配hello.txt
、hello.c
,但不匹配a/hello.java
。 -
模式
foo/
将匹配目录foo
及其下的路径,但不会匹配常规文件或符号链接foo
(这与 Git 中 pathspec 的一般工作方式一致) -
模式
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] 套件的一部分