在使用git的过程中,总有一些我们不想被跟踪的文件,例如vim的交换文件,编译产生的文件等等。这时,我们可以在项目的根目录下创建一个名为 .gitignore 的文件,列出不想被跟踪的文件模式即可。下面是一个 .gitignore 文件的例子:
1 |
*.[oa] |
2 |
*~ |
3 |
*.swp |
4 |
*.bak |
5 |
*.DS_Store |
6 |
logs/* |
第一行告诉git忽略以 .a 或 .o 结尾的文件,第二、三、四、五行告诉git忽略以~、swp、bak、DS_Store结尾的文件, 第六行告诉git忽略logs目录下的所有文件。具体的 .gitignore 文件格式规范如下:
-
所有空行或已#开头的行都会被git忽略(即相当于不读取)。
-
可以使用标准的 glob 模式匹配。
-
匹配模式最后跟反斜杠(
/
)说明要忽略的是目录。 -
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!
)取反(即保守模式)。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*
)匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?
)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9]
表示匹配所有 0 到 9 的数字)。
下面是另外一个示例:
1 |
*.a #忽略以a结尾的文件 |
2 |
!core.a #跟踪core.a |
3 |
/config #忽略根目录下的 config文件,但 /abc/config 不会被忽略 |
4 |
logs/ #忽略logs目录 |
5 |
doc/*.pyc #忽略doc目录下所有以pyc结尾的文件,但不包括 doc/abc/*.pyc |
6 |
7 |
/www/ * |
8 |
! /www/base/ 这两行表示只跟踪根目录下的www中的base目录 |
如果觉得在每个项目中都添加 .gitignore 很麻烦,下面的方法可以偷一些懒:
在用户目录下新建一个 .gitignore 文件并添加过滤规则:
vim ~/.gitignore
1 |
*.[oa] |
2 |
*~ |
3 |
*.swp |
4 |
*.bak |
5 |
*.DS_Store |
6 |
logs/* |
然后执行:
git config --global core.excludesfile ~/.gitignore
这样,就创建了一个全局性的过滤规则。