今天闲下来,终于有时间解决下一直以来困扰我的一个Git的问题。就是如果当我们每次编译Android项目之后,用git status 命令查看后,总会有很多跟编译相关的文件显示为红色(如果你之前没有添加后者修改.gitignore文件的话)。这对于像我一样患有重度强迫症的患者当然是不能接受的。那么我们就来简单的看下.gitignore文件是什么,以及如何正确使用它。

.gitignore文件是什么

在我们使用 git 的时候,我们将文件添加进暂存区往往用的不是git add 单个文件,我们更多的使用的是 git add . 来添加所有的文件,这样更加方便,毕竟某有多少情况下我们需要一个个添加文件。然而,当我们不需要添加某些文件的时候,怎么办呢?也有办法,比如,在Android studio 中,我们可以在项目中新建一个.gitignore文件(如下图中黄色标识处),然后在里面添加我们需要忽略的文件类型,添加进这里面的文件,我们在使用git add .命令的时候,并不会将他们添加进版本控制中,而且在使用git status命令的时候也不会显示出关于它们的任何信息,这样工作区 就变得干净清爽的多啦。

clipboard.png

不过,这里并不会教大家怎么写.gitignore文件,感兴趣的可以在网上搜下,其实很简单,就是忽略指定文件或者指定文件夹下的所有目录,又或者指定类型的文件,本质上其实就是正则表达式这里不详述。此处只是讲如何解决问题。

何时会遇到.gitignore文件问题

这里我假定你已经知道了如何编写.gitignore文件,我这里只说一些注意的东西,和如何解决我们遇到的问题。
诚然,如果你在新建项目的时候直接就编写好该文件,之后在版本控制中也不修改,而且也不会添加其他肯你那个你不想跟踪的文件进来,那你就不需要考虑这些问题了。然而往往我们是在开发的过程中,导入了很多库,这些库又生成了很多编译相关的文件。所以就涉及到修改.gitignore文件。如果你来来回回在本地和服务器之间pushpull了多次,或者跟别人写作的过程中突然想修改,那就会遇到一个问题,那就是:我们修改的.gitignore文件不生效。

解决方法

我们需要注意,如果那些文件我们已经加入了版本控制工具之后,我们要想重新设置.gitignore文件,需要将本地的仓库中的那些忽略的文件从 git 中取消追踪,可以使用以下命令来清空缓存git rm -r --cached . (不要忘记改命令后面的那个 "."),这时,我们会将所有文件都取消追踪,也就是说git不会再管理所有的文件,在命令行中可能还会显示很多文件被删除, 类似于下图:

clipboard.png

不过,不用害怕,这并没有从我们的工作控件之中删除,我们可以使用 git add .将他们重新加入 git 中,而不用担心那些想忽略的文件也添加进来了。之后再用git commit -m "提交信息"进行提交就行了。不过,接下来要注意了,我们最好不要在 .gitignore中添加以下这两行:

/app/.gitignore
/.gitignore

添加这两行的话我们就不会将我们的.gitignore文件进行跟踪了,最好还是别加上这两句。

上面事情不大,可是,如果你加上了项目名/这句,比如HelloWorld/,相信你已经猜到了,如果这样的话,在你执行git rm -r --cached .后紧接着执行 git add .命令后,你会发现,你项目里的所有的东西都不会被 git 管理,当然很容易理解,因为它们已经 git 被忽略了。也许你会想,谁会那么傻,将这个添加进来。你当然不会,但是你不能保证某些情况下“被加入”,我就遇到过这种情况。因为我的 Android Studio 安装了 .gitignore 插件,而它有时候会询问你是否把某些不需要 git 追踪的文件加入进来 ,你点击“添加”的话,它会自动从网上将那些常用的文件加载进来,不过小心,有时候很可能不那么智能,比如像我们项目中有个文件夹,很不幸的就和我们的项目名重名了..然后就悲剧了...

注意:通过以上命令只是将你自己的仓库里的修改设置生效了,如果你是多人协作,他人提交代码后,你还是会出错,这就需要那些跟你协作的人也都进行类似的操作,清除本地 git 缓存下来的东西,从而将那些东西也都从各自的本地仓库里取消追踪(不知道有没有其他方式来简单的解决,暂时只想到这种方式。)

参考:
1.关于Git忽略文件:
http://reondz.github.io/%E6%8...


warmcheng
153 声望14 粉丝