在使用Git的过程当中,咱们喜欢有的文件好比日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来讲一个场景:在你使用git add .的时候,遇到了把你不想提交的文件也添加到了缓存中去的状况,好比项目的本地配置信息,若是你上传到Git中去其余人pull下来的时候就会和他本地的配置有冲突,因此这样的个性化配置文件咱们通常不把它推送到git服务器中,可是又为了偷懒每次添加缓存的时候都想用git add .而不是手动一个一个文件添加,该怎么办呢?很简单,git为咱们提供了一个.gitignore文件只要在这个文件中申明那些文件你不但愿添加到git中去,这样当你使用git add .的时候这些文件就会被自动忽略掉。php
有三种方法能够实现忽略Git中不想提交的文件:
1)在Git项目中定义.gitignore文件
对于常用Git的朋友来讲,.gitignore配置必定不会陌生。这种方式经过在项目的某个文件夹下定义.gitignore文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的Git提交行为。.gitignore 文件是能够提交到公有仓库中,这就为该项目下的全部开发者都共享一套定义好的忽略规则。在.gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:java
1linux 2ios 3git |
|
2)在Git项目的设置中指定排除文件
这种方式只是临时指定该项目的行为,须要编辑当前项目下的 .git/info/exclude文件,而后将须要忽略提交的文件写入其中。须要注意的是,这种方式指定的忽略文件的根目录是项目根目录。缓存
3)定义Git全局的 .gitignore 文件
除了能够在项目中定义 .gitignore 文件外,还能够设置全局的git .gitignore文件来管理全部Git项目的行为。这种方式在不一样的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。这种方式也须要建立相应的 .gitignore 文件,能够放在任意位置。而后在使用如下命令配置Git:服务器
1 |
|
首先要强调一点,这个文件的完整文件名就是".gitignore",注意最前面有个“.”。通常来讲每一个Git项目中都须要一个“.gitignore”文件,这个文件的做用就是告诉Git哪些文件不须要添加到版本管理中。实际项目中,不少文件都是不须要版本管理的,好比Python的.pyc文件和一些包含密码的配置文件等等。这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。
Git忽略文件的原则
- 忽略操做系统自动生成的文件,好比缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是若是一个文件是经过另外一个文件自动生成的,那自动生成的文件就不必放进版本库,好比Java编译产生的.class文件;
- 忽略你本身的带有敏感信息的配置文件,好比存放口令的配置文件。
.gitignore文件的使用方法
首先,在你的工做区新建一个名称为.gitignore的文件。
而后,把要忽略的文件名填进去,Git就会自动忽略这些文件。
不须要从头写.gitignore文件,GitHub已经为咱们准备了各类配置文件,只须要组合一下就可使用了。
有时对于git项目下的某些文件,咱们不须要归入版本控制,好比日志文件或者IDE的配置文件,此时能够在项目的根目录下创建一个隐藏文件 .gitignore(linux下以.开头的文件都是隐藏文件),而后在.gitignore中写入须要忽略的文件。
1 2 3 4 |
|
.gitignore注释用'#', *表示匹配0个或多个任意字符,因此上面的模式就是要忽略全部的xml文件,log文件和apk文件。
.gitignore配置文件用于配置不须要加入版本管理的文件,配置好该文件能够为版本管理带来很大的便利。
.gitignore忽略规则的优先级
在 .gitingore 文件中,每一行指定一个忽略规则,Git检查忽略规则的时候有多个来源,它的优先级以下(由高到低):
1)从命令行中读取可用的忽略规则
2)当前目录定义的规则
3)父级目录定义的规则,依次递推
4)$GIT_DIR/info/exclude 文件中定义的规则
5)core.excludesfile中定义的全局规则
.gitignore忽略规则的匹配语法
在 .gitignore 文件中,每一行的忽略规则的语法以下:
1)空格不匹配任意文件,可做为分隔符,可用反斜杠转义
2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可使用反斜杠进行转义。
3)可使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。
4)以斜杠"/"开头表示目录;"/"结束的模式只匹配文件夹以及在该文件夹路径下的内容,可是不匹配该文件;"/"开始的模式匹配项目跟目录;若是一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,若是该模式不在 .gitignore 文件中,则相对于项目根目录。
5)以星号"*"通配多个字符,即匹配多个任意字符;使用两个星号"**" 表示匹配任意中间目录,好比`a/**/z`能够匹配 a/z, a/b/z 或 a/b/c/z等。
6)以问号"?"通配单个字符,即匹配一个任意字符;
7)以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。好比[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;若是在方括号中使用短划线分隔两个字符,表示全部在这两个字符范围内的均可以匹配。好比[0-9]表示匹配全部0到9的数字,[a-z]表示匹配任意的小写字母)。
8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式之外的文件或目录,能够在模式前加上惊叹号(!)取反。须要特别注意的是:若是文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起做用的。也就是说"!"开头的模式表示否认,该文件将会再次被包含,若是排除了该文件的父级目录,则使用"!"也不会再次被包含。可使用反斜杠进行转义。
须要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着若是前面的规则匹配的范围更大,则后面的规则将不会生效;
.gitignore忽略规则简单说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
舒适提示:
若是你不慎在建立.gitignore文件以前就push了项目,那么即便你在.gitignore文件中写入新的过滤规则,这些规则也不会起做用,Git仍然会对全部文件进行版本管理。简单来讲出现这种问题的缘由就是Git已经开始管理这些文件了,因此你没法再经过过滤规则过滤它们。因此你们必定要养成在项目开始就建立.gitignore文件的习惯,不然一单push,处理起来会很是麻烦。
.gitignore忽略规则经常使用示例
1)示例
好比你的项目是java项目,.java文件编译后会生成.class文件,这些文件多数状况下是不想被传到仓库中的文件。这时候你能够直接适用github的.gitignore文件模板。https://github.com/github/gitignore/blob/master/Java.gitignore 将这些忽略文件信息复制到你的.gitignore文件中去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
能够看到github为咱们提供了最流行的.gitignore文件配置。保存.ignore文件后咱们查看下git status,检查下是否还有咱们不须要的文件会被添加到git中去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
好比个人项目目录下有一个Config.ini文件,这个是个本地配置文件我不但愿上传到git中去,咱们能够在gitignore文件中添加这样的配置:
1 |
|
或者你想忽略全部的.ini文件你能够这样写:
1 |
|
若是有些文件已经被你忽略了,当你使用git add时是没法添加的,好比我忽略了*.class,如今我想把HelloWorld.class添加到git中去:
1 2 3 4 |
|
git会提示咱们这个文件已经被咱们忽略了,须要加上-f
参数才能强制添加到git中去:
1 2 3 4 5 6 7 8 9 10 11 |
|
这样就能强制添加到缓存中去了。若是咱们意外的将想要忽略的文件添加到缓存中去了,咱们可使用rm命令将其从中移除:
1 2 |
|
若是你已经把不想上传的文件上传到了git仓库,那么你必须先从远程仓库删了它,咱们能够从远程仓库直接删除而后pull代码到本地仓库这些文件就会本删除,或者从本地删除这些文件而且在.gitignore文件中添加这些你想忽略的文件,而后再push到远程仓库。
2)示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
3)示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
.gitignor忽略规则查看
若是你发下.gitignore写得有问题,须要找出来到底哪一个规则写错了,能够用git check-ignore命令检查:
1 2 |
|
能够看到HelloWorld.class匹配到了咱们的第一条*.class的忽略规则因此文件被忽略了。
简单来讲,要实现过滤掉Git里不想上传的文件,如上介绍三种方法能达到这种目的,只不过适用情景不同:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
Git忽略规则(.gitignore配置)不生效缘由和解决
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
在使用.gitignore文件后如何删除远程仓库中之前上传的此类文件而保留本地文件
在使用git和github的时候,以前没有写.gitignore文件,就上传了一些没有必要的文件,在添加了.gitignore文件后,就想删除远程仓库中的文件却想保存本地的文件。这时候不能够直接使用"git rm directory",这样会删除本地仓库的文件。可使用"git rm -r –cached directory"来删除缓冲,而后进行"commit"和"push",这样会发现远程仓库中的没必要要文件就被删除了,之后能够直接使用"git add -A"来添加修改的内容,上传的文件就会受到.gitignore文件的内容约束。
额外说明:git库所在的文件夹中的文件大体有4种状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
***************当你发现本身的才华撑不起野心时,就请安静下来学习吧***************