为什么要忽略某些文件或文件夹的变化?

git作为一款项目文件变更版本管理软件,其主要功能之一就是追踪项目文件夹内各种文件及文件夹的变更情况。但是,在日常使用中,并非项目文件夹下的所有文件及文件夹变更都需要纳入版本控制。例如,一些IDE在项目文件夹中留下的配置文件就不需要提交到远程服务器端与其他项目参与者分享,因为每个项目参与者的开发环境多多少少有些区别,我用不了你的IDE配置,你也用不了我的配置。如果团队中某一个人将自己的工作区配置上传到服务器端,不仅无益于源代码版本管理,反而会给其他项目参与者带来困扰。

除此之外,还有我们在本地开发环境下对源代码编译产生的编译结果,更不需要提交到服务器端。首先,每个项目参与者都可以通过编译源代码获得编译结果;其次,一个项目的编译结果可能超过几百MB甚至上GB。把这些内容提交到服务器端,会浪费大量的公共存储空间和上传下载时间。所以,我们需要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>即你要移除的文件全名。

如何使git忽略某些文件或文件夹的更多相关文章

  1. 设置SVN,Git忽略MAC的.DS_Store文件的方法

    设置SVN,Git忽略MAC的.DS_Store文件的方法 I. 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bo ...

  2. git忽略已经提交的文件【转载】

    有时候我们添加.gitignore文件之前已经提交过了文件..gitignore只能忽略那些原来没有被track的文件(自添加以后,从未 add 及 commit 过的文件),如果某些文件已经被纳入了 ...

  3. Git忽略提交规则 .gitignore文件

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交.简单来说一个场景:在你使用git add .的时候,遇到 ...

  4. git 忽略已跟踪的文件

    对于未跟踪的文件,可以编辑.gitignore文件进行忽略. 对于已跟踪的文件,编辑.gitignore文件不会起作用,它只针对未被跟踪的文件,也就是你先设置规则,然后添加的新文件符合这些规则的就会被 ...

  5. git忽略对已入库文件的修改

    项目开发过程中,会遇到本地配置文件每个开发人员不同的情况,但如果遇到类似数据库配置这种最终需要加入 git 版本控制的配置,则会陷入两难境地.要么不跟踪,要么有人提交后其他人同步下来必须手动修改,非常 ...

  6. git 忽略不提交的文件3种情形

    1..gitignore文件 :从未提交过的文件,从来没有被 Git 记录过的文件 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件.只能作用于未跟踪的文件( ...

  7. git忽略规则以及.gitignore文件不生效解决办法

    正文 Git忽略规则: #此为注释 – 内容被 Git 忽略 .sample # 忽略所有 .sample 结尾的文件 !lib.sample # 但 lib.sample 除外 /TODO # 仅仅 ...

  8. Git 忽略已经提交的文件

    如果想在本地忽略某个文件的话执行这个命令: git update-index --assume-unchanged <file> 如果想重新同步这个文件的话执行这个命令. git upda ...

  9. git忽略已提交的文件或目录

    项目中的某个文件或目录已经被commit,并push到远程服务器server了. 这时发现要忽略该文件或目录,在.gitignore文件里面添加规则已经不起作用了.因为.gitignore只对从来没有 ...

随机推荐

  1. JavaScript自适应调整文字大小

    JavaScript自适应调整文字大小 今天有个任务,发现页面上的数字由于太长而与其他数字重叠了.这个数字还不能像文字那样只显示一部分,必须全部显示.想了一些办法都不行,最后把超过1000变成1K,大 ...

  2. js中有关类、对象的增强函数

    javascript中继承的实现 基础实现 function Range(from,to){ this.from =from; this.to =to; } Range.prototype = { i ...

  3. FocusBI: 总线矩阵(原创)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...

  4. How Religion Destroys Programmers--ref

    http://simpleprogrammer.com/2013/07/08/how-religion-destroys-programmers/ discovered something about ...

  5. WPF Window对象的生命周期

    WPF中所有窗口的基类型都是System.Windows.Window.Window通常用于SDI(SingleDocumentInterface).MDI(MultipleDocumentInter ...

  6. js 常用脚本

    1.判断电话号码和手机号码 var tel = $("#tel").val(); if (isNotBlank($.trim(tel))) { //不为空的情况下判断符合手机号码标 ...

  7. PL/SQL之流控制语句

    1.选择控制语句 --语法1--IF 条件 THEN 语句; END IF; DECLARE v_Salary ,); BEGIN SELECT salary INTO v_Salary FROM a ...

  8. Lucence学习之一:全文检索的基本原理

    本文转载自:  http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623594.html 一.总论 根据http://lucene.ap ...

  9. CXF - 拦截器获取调用方法

    没想到要弄这么一个东西. 起初只是想用interceptor记录一下webservice调用日志,后来却被要求在页面展示. 展示容易,但只是展示webservice的地址无法让用户从中明白什么. 那么 ...

  10. nodejs中cookie、session的使用

    因为http会话的无状态性,为了标记用户的登录状态,便出现了cookie.cookie分为很多种,有普通cookie.签名cookie.json cookie等,这里主要记录下在express应用中如 ...