Git 从入门到精通(忽略某些文件.gitignore)(五)

来源:互联网 发布:连汝安 知乎 编辑:程序博客网 时间:2024/04/28 02:08

文章参考 : http://cache.baiducontent.com/c?m=9d78d513d9961ae94fece4697d65c0121d43f1632ba1d6027ea48439e4732a47501692ac53550443939b733d47e90b4beb832b6f724665a09bbfd9168de5cf7d6e9f27432141d95c4b845df49713659271c747abb21ee3b1f23295adc5d3a80e15950d&p=c2759a46d6c550fb09a2c7710f649d&newp=c4769a47c5d900ff57ee9478444f96231610db2151d4d1136b82c825d7331b001c3bbfb423241105d6c17a6107a44258e9f437793c0225a3dda5c91d9fb4c574799b3d75&user=baidu&fm=sc&query=git%BA%F6%C2%D4%CE%C4%BC%FE&qid=94cfb4d7000282c4&p1=4

在我们使用git管理项目的时候,我们总会有些文件无需纳入Git的管理,也不希望他们总是出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。

所以我们可以创建一个名为 .gitignore文件,列出要忽略的文件模式。
比如:
$cat .gitignore
*.[oa]
*~
这个例子第一行告诉Git忽略所有以.0或.a结尾的文件。 一般这类文件和存档文件都是编译过程中出现的,我们不需要跟踪他们的版本。
第二行告诉Git忽略所有以~结尾的文件。

一般来说,最好一开始就设置好.gitignore文件,以免将来误提交这类无用的文件。

文件.gitignore的格式规范如下:
1,所有空行或者以注释符号#开头的行都会被Git忽略。
2,匹配模式最后跟斜杠(/)说明要忽略的是目录。
3,可以使用标准的glob模式匹配。
4,要忽略指定模式以外的文件或者目录,可以在模式前加上惊叹号(!)取反。

所谓的glob模式是指shell所使用的简化了的正则表达式。
星号(*)匹配零个或多个任意字符;
[abc]匹配任何一个在方括号中的字符。
(?)问号只匹配一个任意字符。

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦。

常用实例:
下面我们看看常用的规则:

1/mtk/               过滤整个文件夹2)*.zip                过滤所有.zip文件3)/mtk/do.c         过滤某个具体文件假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么我们就需要使用:1/mtk/2)!/mtk/one.txta)规则:fd1/*说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;b)规则:/fd1/*说明:忽略根目录下的 /fd1/ 目录的全部内容;c)规则:/*!.gitignore!/fw/bin/!/fw/sf/说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin//fw/sf/ 目录;# IntelliJ IDEA Project files.idea*.iml*.ipr*.iws

————————Git忽略规则及.gitignore规则不生效的解决办法—————————–
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

# 此为注释 – 将被 Git 忽略*.a # 忽略所有 .a 结尾的文件!lib.a # 但 lib.a 除外/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODObuild/ # 忽略 build/ 目录下的所有文件doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .git add .git commit -m 'update .gitignore'

注意:
不要误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。
如果文件曾经被 Git 记录过,那么.gitignore 就对它们完全无效。

原创粉丝点击