为什么要忽略某些文件或文件夹的变化?
git作为一款项目文件变更版本管理软件,其主要功能之一就是追踪项目文件夹内各种文件及文件夹的变更情况。但是,在日常使用中,并非项目文件夹下的所有文件及文件夹变更都需要纳入版本控制。例如我们使用自己的开发环境对项目进行开发时产生的项目配置文件、工作区配置文件。因为每个项目参与者的开发环境不尽相同,产生的项目配置文件及工作区配置也会有很大不同。如果将这些文件一并上传到服务器端,不仅无益于git对源代码的版本管理,反而会给其他项目参与者带来困扰。除此之外,还有我们在本地开发环境下对源代码编译产生的编译结果,更不需要提交到服务器端。首先,每个项目参与者都可以通过编译源代码获得编译结果;其次,一个项目的编译结果可能超过几百MB甚至上GB。把这些内容提交到服务器端,会浪费大量的公共存储空间和大量的上传下载时间。所以,我们需要告诉git不用去管理这些文件的变更信息,需要git在版本管理时忽略这些文件的变更信息。
如何忽略这些文件和文件夹的变更信息?
1、创建.gitignore文件
在git管理的项目文件夹中(严格的讲,应该叫做git的本地repository),创建一个文件名为“.gitignore”的纯文本文件,如图1所示:
图1
上图中的.gitignore文件就是我用notepad++刚刚创建出来用于告诉git忽略哪些文件变更的配置文件。在这里多说一句,Git在扫描文件变更时,会先查看.gitignore的配置,根据.gitignore中的配置再决定哪些文件需要被标注上untracked。当然,那些被ignore的文件肯定不会被标上untracked,因为那些文件对于git而言是透明的。
2、编辑.gitignore文件
在图1中,target文件夹是本地编译结果,nbactions.xml和nb-configuration.xml都是Netbeans IDE的相关配置文件,上述这些文件和文件夹我都不需要提交到远程服务器端。我们先来看看,如果.gitignore中什么都不写,git会怎样处理上述文件和文件夹。这里我使用了GitHub官网提供的GitHub Desktop软件,感兴趣的朋友可以去这里下载(https://desktop.github.com/)
这是GitHub Desktop中显示的需要提交到版本库中的文件列表,如图2所示。
图2
git将需要提交到版本库的资源文件全部列出来了,几乎全是target目录下的东西。target目录是maven项目中专门用来暂存源代码编译结果的目录,这些内容不用提交到服务器端。还有nbactions.xml和nb-configuration.xml这两个文件,也不需要提交到服务器端。
让我们编辑.gitignore文件,将target、nbactions.xml、nb-configuration.xml三个条目添加到.gitignore中,如列表1所示。
############################## ## Folders ## ############################## target ############################## ## Netbeans conf ## ############################## nb-configuration.xml nbactions.xml
列表1
再来看看GitHut Desktop中有什么变化,如图3所示。
图3
上述我们不希望提交的文件变更全部消失了,git不会再追踪这些文件的变更情况,也不会将它们提交到服务器端。
Tips:
1、在.gitignore文件中还可以使用wildcard(某位同学称之为“野卡” )通配符,例如,*.log,去掉.gitignore同一文件夹中的所有后缀名为log的文件。GitHub上提供了一份常用的忽略规则,大家可以拿来参考,详见此处:https://gist.github.com/octocat/9257657。
2、如果.gitignore忽略规则创建于文件提交代码库之后,则.gitignore规则不会影响目前所提交的文件(不会自动把文件从服务器端删除掉)。你需要手动删除,用如下的方式:
git rm --cached <FILENAME>
<FILENAME>即你要移除的文件全名。