「gitignore」

  LINUX MANUAL PAGES

gitignore,指定有意的未跟踪的文件,并忽略。

文件概要(SYNOPSIS)

$HOME/.config/git/ignore
$GIT_DIR/info/exclude
.gitignore

描述(DESCRIPTION)

在gitignore文件中,指定了有意未跟踪的、需要Git忽略的文件。已经追踪的文件不受影响。参见下面的NOTES部分。

在gitignore文件中,每一行都指定一个Pattern。在决定是否忽略某个路径时,Git通常会从多个地方读取gitignore文件,按照以下从最高到最低的顺序读取(在一个优先级中,最后一个Pattern决定结果):

  • 对于支持它们的那些命令,可以从命令行读取Pattern。
  • 从同级目录(或者父级目录)中的.gitignore文件中读取的Pattern及任何父目录中读取的Pattern(工作树的最顶层,即项目的根目录),会一起被下层文件中的.gitignore文件覆盖,直到到包含.gitignore文件的目录。这些Pattern相对于.gitignore文件的位置开始匹配。一个项目通常会在其存储库中包含.gitignore文件,其中包含作为项目构建一部分生成的文件的Pattern。
  • $GIT_DIR/info/exclude.
  • 由配置变量core.excludesFile指定的Pattern读取文件。

放置Pattern的文件取决于Pattern的使用方式。

不应该版本控制和通过克隆分发到其他存储库的Pattern,应该进入.gitignore文件。

某个存储库特定的,而且不需要与其他相关存储库共享的Pattern(例如,存储在存储库中,但是特定于一个用户工作流程的辅助文件)应该进入$GIT_DIR/info/exclude文件。

用户希望Git在所有情况下忽略的Pattern(例如,由编辑器生成的备份或临时文件)通常会转到由用户的~/.gitconfig中的core.excludesFile指定的文件中。其默认值为$ XDG_CONFIG_HOME/git/ignore。如果$ XDG_CONFIG_HOME未设置或为空,则使用$ HOME/.config/git/ignore。

底层的Git管道工具(如git ls-files和git read-tree)读取由命令行选项指定的gitignore Pattern,或从命令行选项指定的gitignore文件。更高级的Git工具,例如git status和git add,使用上面指出的源的Partern。

「PATTERN」的格式(PATTERN FORMAT)

空白行什么都不匹配。

井号(#)开始的行表示注释。如果要以井号(#)开始行可以使用反斜线(\)进行转义。

尾随的空格将会被忽略,除非使用反斜线转义。

可选前缀“!”用于消除pattern;任何由先前模式排除的匹配文件将被再次包含。如果该文件的父目录被排除,则不可能重新包含文件。
出于性能原因,Git不会列出排除的目录,因此,包含文件的任何模式都无效,无论它们在哪里定义。
如果要使用“!”作为文件的开头,可以使用反斜线进行转义。

如果模式以斜线结束,则为了以下描述的目的而将其删除,但只能找到与目录的匹配。换句话说,foo/将匹配一个目录foo和它下面的路径,但不匹配常规文件或符号链接foo(这与路径规则在Git中的工作方式一致)。

如果Partern不包含斜杠/,Git将其视为shell glob模式,并根据.gitignore文件的位置检查与路径名的匹配(相对于工作树的toplevel,如果不是从.gitignore文件)。

另一方面,Git将Partern视为适合通过fnmatch(3)使用FNM_PATHNAME标志的shell glob:模式中的通配符与路径名中的/不匹配。例如,“Documentation/*.html”与“Documentation/git.html”匹配,而不是“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。

前导斜线匹配路径名的开头。例如,“/*.c”匹配“cat-file.c”,而不匹配“mozilla-sha1/sha1.c”。

以****后跟斜杠(/)表示在所有目录中匹配。例如,“/foo”匹配所有的“foo”文件或目录,与模式“foo”相同。“**/foo/bar”匹配直接位于foo目录下的“bar”文件或者目录。

尾随的“/”匹配所有内容。例如,“abc/”匹配目录“abc”内的所有文件,相对于.gitignore文件的位置,具有无限深度。

//“匹配零个或多个目录。例如,“a//b”匹配“a/b”,“a/x/b”,“a/x/y/b”等。

其他连续的星号被视为无效。

注意事项(NOTES)

gitignore文件的目的:确保那些Git由保留的不跟踪的某些文件不被追踪。

要停止跟踪某个已经跟踪的文件,使用git rm –cached(删除已经跟踪的文件,但是文件保留在工作目录中)

简单示例(EXAMPLES)

示例一:
$ 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

相关文档(SEE ALSO)

git-rm(1), gitrepository-layout(5), git-check-ignore(1)

GIT

Part of the git(1) suite

参考文献