名称
gitignore-指定特定的不被跟踪的文件
概要
与$GIT_DIR/info/exclude和.gitignore等文件有关
介绍
一个gitignore文件指定不被git所追踪的文件。已经被追踪的文件不受影响。见下面的“注意”;
gitignore每一行指定一种模式。当git决定是否忽略某个路径时,它检查多个gitignore文件的模式,从高到低优先级通过下面规则确定。
- 来自于支持使用模式的命令行命令
- 来自于文件系统中的.gitignore文件。目录结构较高的.gitignore模式将被较近的.gitignore覆盖
- 来自$GIT_DIR/info/exclude
- 被配置变量core.excludesfile指定文件中的模式
如果你想让团队里所有成员的git都不追踪某些文件,可以使用.gitignore;如果你只想在自己的仓库中不追踪某些文件,可以通过在$GIT_DIR/info/exclude中设置;如果你想让自己拥有的所有仓库都不追踪某些文件,可以在~/.gitconfig中的core.excludesfile指定全局忽略文件的地址。
模式格式
- 空白行不匹配文件。可作为分隔符增加可读性
- 以#开头的行是注释
- 可选的!前缀将否定模式,任何匹配该模式并被忽略的文件将重新受到追踪。当然该文件需要有更高的优先级
- 以/结尾的模式将会匹配特定的文件夹以及它下面的文件
- 如果包含/结尾。git将匹配相对于.gitignore文件的路径(如果没有.gitignore则从顶级工作目录开始$GIT_DIR)
- 通配符并不匹配/
- 以/开头的模式匹配文件名开头。如"/*.c" 匹配 "cat-file.c" 但不匹配 "mozilla-sha1/sha1.c".
注意
gitignore的目的是保证一些不被追踪的文件仍然不被追踪;
忽略已被追踪文件还未提交的改变使用 git update-index --assume-unchanged;
停止已经追踪的文件git rm --cached
示例
$ 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