.gitignore简介

来源:互联网 发布:淘宝提成管理系统 编辑:程序博客网 时间:2024/06/16 00:42
本文编辑整理自
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>

结束!
0 0
原创粉丝点击