本文编辑整理自
http://blog.sina.com.cn/s/blog_446cc66b01010a8j.html
http://blog.csdn.net/richardysteven/article/details/6069418
一、简介
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,像是日志或者编译过程中创建的等等。
如果没有添加该文件,git status会报有这些文件没有track。
$git status# On branch master# Untracked files:# (use "git add <file>..." to include in what will be committed)## .metadata/# gitignore
我们可以在项目根目录下
创建一个名为 .gitignore 的文件,列出要忽略的文件模式,来看一个简单的例子:
$ cat . gitignore*.[ oa ]*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
二、格式规范
文件
.gitignore
的格式规范如下
:
1、所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
2、可以使用标准的 glob 模式匹配。
3、匹配模式最后跟反斜杠(/)说明要忽略的是目录。
4、要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
我们再看一个 .gitignore 文件的例子:
# 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
三、开放模式和保守模式
开放模式负责设置过滤哪些文件和文件夹。
示例3-1-1
过滤文件夹设置:
/mtk/ 表示过滤这个文件夹
示例3-1-2
指定过滤某种类型的文件:
*. zip*. rar*. via*. tmp*. err
示例3-1-3
指定过滤某个文件:
/mtk/ do . c/ mtk / if . h
保守模式负责设置哪些文件不被过滤,也就是哪些文件要被跟踪。
示例3-2-1
跟踪某个文件夹
!/plutommi/mmi
示例3-2-2
跟踪某类文件
!*. c!*. h
跟踪某个指定文件
示例3-2-3
!/plutommi/mmi/mmi_features.h
四、简易原则
采用共享模式与保守模式结合配置的办法。eg:一个文件夹下有很多文件夹和文件,而我只想跟踪其中的一个文件,这样设置就可以满足这种情况,先用共享模式把整个目录 都设置为不跟踪,然后再用保守模式把这个文件夹中想要跟踪的文件设置为被跟踪,配置很简单,就可以跟踪想要跟踪的文件。
示例4-1
#######开放模式############################ folder ################/_souceInsight_//build//MoDIS//Doc//mtk_lib//scripts//header_temp//tools/AudioResGen//tools/GLBOptionSwtichRef//tools/GMSL//tools/MinGW//tools/MSYS//tools/NewMMIResourceTool//tools/NVRAMStatistic//tst//verno//plutommi/tool//plutommi/Customer/ResGenerator//plutommi/Customer/CustResource//plutommi/Customer/LcdResource//plutommi/Customer/Images//plutommi/mmi/Framework/EventHandling/EventsInc/mmi_menu_handlers.h/vendor/font/MTK/official/project/plutommi/content/inc//vendor/font/MTK/official/project/plutommi/content/src/################ fixed file ################.gitignore*.exe*.txt*.def*.dsp*.lib*.doc*.dll*.lnt*.pm*.xls*.dbg*.DBG*.o*.plg*.keep################ temp file ################~**.log*.cmm*.men*.ini*.fig*.cmp*.tmp################ script ################*.bat#########保守模式############!/plutommi/Customer/CustResource/PLUTO_MMI/!/plutommi/Customer/LcdResource/MainLcd128X160/!/plutommi/Customer/Images/PLUTO128X160/image.zip!/vendor/font/MTK/official/project/plutommi/content/inc/MainLcd128X160/!/vendor/font/MTK/official/project/plutommi/content/src/MainLcd128X160/
五、进阶
对于untrack的文件,我们可以创建.gitignore文件。
对于已经track的文件,我们可以这样做:
git update-index --assume-unchanged <files>
这样,即使已经更改了文件,用git status也不会看见文件已经更改。
但在使用时需要小心,取消这种设定可以使用:
git update-index --no-assume-unchanged <files>
结束!