本文编辑整理自
http://blog.sina.com.cn/s/blog_446cc66b01010a8j.html
http://blog.csdn.net/richardysteven/article/details/6069418
一、简介
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,像是日志或者编译过程中创建的等等。
如果没有添加该文件,git status会报有这些文件没有track。
<div><span class="pln">$git status</span></div><div><span class="com" style="color:#8800;"># On branch master</span></div><div><span class="com" style="color:#8800;"># Untracked files:</span></div><div><span class="com" style="color:#8800;"># (use "git add <file>..." to include in what will be committed)</span></div><div><span class="com" style="color:#8800;">#</span></div><div><span class="com" style="color:#8800;"># .metadata/</span></div><div><span class="com" style="color:#8800;"># gitignore</span></div>
我们可以在项目根目录下
创建一个名为 .gitignore 的文件,列出要忽略的文件模式,来看一个简单的例子:
<div><span class="pln">$ cat </span><span class="pun" style="color:#66660;">.</span><span class="pln">gitignore </span></div><div><span class="pun" style="color:#66660;">*.[</span><span class="pln">oa</span><span class="pun" style="color:#66660;">]</span><span class="pln"> </span></div><div><span class="pun" style="color:#66660;">*~</span></div>
第一行告诉 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
过滤文件夹设置:
<p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span class="str" style="color:#0880;">/mtk/</span><span class="pln"> </span><span class="pun" style="color:#66660;">表示过滤这个文件夹</span></p>
示例3-1-2
指定过滤某种类型的文件:
<div><span class="pun" style="color:#66660;">*.</span><span class="pln">zip</span></div><div><span class="pun" style="color:#66660;">*.</span><span class="pln">rar</span></div><div><span class="pun" style="color:#66660;">*.</span><span class="pln">via</span></div><div><span class="pun" style="color:#66660;">*.</span><span class="pln">tmp</span></div><div><span class="pun" style="color:#66660;">*.</span><span class="pln">err</span></div>
示例3-1-3
指定过滤某个文件:
<div><span class="str" style="color:#0880;">/mtk/</span><span class="kwd" style="color:#0088;">do</span><span class="pun" style="color:#66660;">.</span><span class="pln">c</span></div><div><span class="pun" style="color:#66660;">/</span><span class="pln">mtk</span><span class="pun" style="color:#66660;">/</span><span class="kwd" style="color:#0088;">if</span><span class="pun" style="color:#66660;">.</span><span class="pln">h</span></div>
保守模式负责设置哪些文件不被过滤,也就是哪些文件要被跟踪。
示例3-2-1
跟踪某个文件夹
<p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span class="pun" style="color:#66660;">!</span><span class="str" style="color:#0880;">/plutommi/</span><span class="pln">mmi</span></p>
示例3-2-2
跟踪某类文件
<div><span class="pun" style="color:#66660;">!*.</span><span class="pln">c</span></div><div><span class="pun" style="color:#66660;">!*.</span><span class="pln">h</span></div>
跟踪某个指定文件
示例3-2-3
!/plutommi/mmi/mmi_features.h
四、简易原则
采用共享模式与保守模式结合配置的办法。eg:一个文件夹下有很多文件夹和文件,而我只想跟踪其中的一个文件,这样设置就可以满足这种情况,先用共享模式把整个目录 都设置为不跟踪,然后再用保守模式把这个文件夹中想要跟踪的文件设置为被跟踪,配置很简单,就可以跟踪想要跟踪的文件。
示例4-1
<div><span class="com" style="color:#8800;">#######开放模式############</span></div><div> </div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;"># folder #</span></div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;">/_souceInsight_/</span></div><div><span class="com" style="color:#8800;">/build/</span></div><div><span class="com" style="color:#8800;">/MoDIS/</span></div><div><span class="com" style="color:#8800;">/Doc/</span></div><div><span class="com" style="color:#8800;">/mtk_lib/</span></div><div><span class="com" style="color:#8800;">/scripts/</span></div><div><span class="com" style="color:#8800;">/header_temp/</span></div><div><span class="com" style="color:#8800;">/tools/AudioResGen/</span></div><div><span class="com" style="color:#8800;">/tools/GLBOptionSwtichRef/</span></div><div><span class="com" style="color:#8800;">/tools/GMSL/</span></div><div><span class="com" style="color:#8800;">/tools/MinGW/</span></div><div><span class="com" style="color:#8800;">/tools/MSYS/</span></div><div><span class="com" style="color:#8800;">/tools/NewMMIResourceTool/</span></div><div><span class="com" style="color:#8800;">/tools/NVRAMStatistic/</span></div><div><span class="com" style="color:#8800;">/tst/</span></div><div><span class="com" style="color:#8800;">/verno/</span></div><div><span class="com" style="color:#8800;">/plutommi/tool/</span></div><div><span class="com" style="color:#8800;">/plutommi/Customer/ResGenerator/</span></div><div><span class="com" style="color:#8800;">/plutommi/Customer/CustResource/</span></div><div><span class="com" style="color:#8800;">/plutommi/Customer/LcdResource/</span></div><div><span class="com" style="color:#8800;">/plutommi/Customer/Images/</span></div><div><span class="com" style="color:#8800;">/plutommi/mmi/Framework/EventHandling/EventsInc/mmi_menu_handlers.h</span></div><div><span class="com" style="color:#8800;">/vendor/font/MTK/official/project/plutommi/content/inc/</span></div><div><span class="com" style="color:#8800;">/vendor/font/MTK/official/project/plutommi/content/src/</span></div><div> </div><div> </div><div> </div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;"># fixed file #</span></div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;">.gitignore</span></div><div><span class="com" style="color:#8800;">*.exe</span></div><div><span class="com" style="color:#8800;">*.txt</span></div><div><span class="com" style="color:#8800;">*.def</span></div><div><span class="com" style="color:#8800;">*.dsp</span></div><div><span class="com" style="color:#8800;">*.lib</span></div><div><span class="com" style="color:#8800;">*.doc</span></div><div><span class="com" style="color:#8800;">*.dll</span></div><div><span class="com" style="color:#8800;">*.lnt</span></div><div><span class="com" style="color:#8800;">*.pm</span></div><div><span class="com" style="color:#8800;">*.xls</span></div><div><span class="com" style="color:#8800;">*.dbg</span></div><div><span class="com" style="color:#8800;">*.DBG</span></div><div><span class="com" style="color:#8800;">*.o</span></div><div><span class="com" style="color:#8800;">*.plg</span></div><div><span class="com" style="color:#8800;">*.keep</span></div><div> </div><div> </div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;"># temp file #</span></div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;">~*</span></div><div><span class="com" style="color:#8800;">*.log</span></div><div><span class="com" style="color:#8800;">*.cmm</span></div><div><span class="com" style="color:#8800;">*.men</span></div><div><span class="com" style="color:#8800;">*.ini</span></div><div><span class="com" style="color:#8800;">*.fig</span></div><div><span class="com" style="color:#8800;">*.cmp</span></div><div><span class="com" style="color:#8800;">*.tmp</span></div><div> </div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;"># script #</span></div><div><span class="com" style="color:#8800;">###############</span></div><div><span class="com" style="color:#8800;">*.bat</span></div><div> </div><div><span class="com" style="color:#8800;">#########保守模式############</span></div><div><span class="com" style="color:#8800;">!/plutommi/Customer/CustResource/PLUTO_MMI/</span></div><div><span class="com" style="color:#8800;">!/plutommi/Customer/LcdResource/MainLcd128X160/</span></div><div><span class="com" style="color:#8800;">!/plutommi/Customer/Images/PLUTO128X160/image.zip</span></div><div><span class="com" style="color:#8800;">!/vendor/font/MTK/official/project/plutommi/content/inc/MainLcd128X160/</span></div><div><span class="com" style="color:#8800;">!/vendor/font/MTK/official/project/plutommi/content/src/MainLcd128X160/</span></div>
五、进阶
对于untrack的文件,我们可以创建.gitignore文件。
对于已经track的文件,我们可以这样做:
<p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span class="pln">git update</span><span class="pun" style="color:#66660;">-</span><span class="pln">index </span><span class="pun" style="color:#66660;">--</span><span class="pln">assume</span><span class="pun" style="color:#66660;">-</span><span class="pln">unchanged </span><span class="str" style="color:#0880;"><files></span></p>
这样,即使已经更改了文件,用git status也不会看见文件已经更改。
但在使用时需要小心,取消这种设定可以使用:
<p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span class="pln">git update</span><span class="pun" style="color:#66660;">-</span><span class="pln">index </span><span class="pun" style="color:#66660;">--</span><span class="kwd" style="color:#0088;">no</span><span class="pun" style="color:#66660;">-</span><span class="pln">assume</span><span class="pun" style="color:#66660;">-</span><span class="pln">unchanged </span><span class="str" style="color:#0880;"><files></span></p>
结束!