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

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. 案例20-页面使用redis缓存显示类别菜单

    1 准备工作 1  需要导入所需要的jar包. 2 启动windows版本的redis服务端 3 准备JedisUtils工具类的配置文件redis.properties redis.maxIdle= ...

  2. Android 开发 命名规范(基础回顾)

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

  3. jmeter(5)——参数化

    之前接触过QTP或者Loadrunner的小伙伴,应该对参数化不陌生,在<badboy详解篇>中也介绍了badboy的参数化,今天说一下jmeter的参数化,同样,我们举例说明,以msn. ...

  4. css用hover制作下拉菜单

    首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang="en&q ...

  5. C#基本语法 - .Net 4.0 之 Dynamic 动态类型

      一..net4.0主要新特性 .Net4.0在.Net3.5基础上新增的主要特性有:可选参数.命名参数和Dynamic.具体请阅生鱼片的这篇博文.这里我们着重讲解C#4.0的Dynamic特性,对 ...

  6. GuavaCache实现堆缓存

    一.缓存 频繁地数据库I/O是很大的负担,而缓存是减少I/O提高性能的银弹. 缓存的实现一般上是以类似map的键值对的形式,并对外提供put和get方法,但缓存空间不能无限扩大,所以它得有一种缓存清除 ...

  7. jasperreports+iReport+jatoolsPrinter制作报表笔记

    此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 准备工作 1. 点击此下载相关的文件,并把 ims 文件夹放到 ims 工程对应的路劲下 2. 参考网址:杰创打印控件 二. ...

  8. docker 容器启动并自启动redis

    centos7.5 背景:每次开机后都要自动启动redis,也就是宿主机开机,启动容器,然后启动redis 按照网上的做法是:修改redis.conf ,修改redis的启动脚本(utils/...s ...

  9. PHP获取当前时间戳

    PHP提供了专门的获取当前时间戳的函数,那就是time()函数.   time()函数获取当前的UNIX时间戳,返回值为从时间戳纪元(格林威治时间1970年1月1日 00:00:00)到当前的秒数.  ...

  10. csharp: HttpWebRequest and HttpWebResponse

    http://stackoverflow.com/questions/4015324/http-request-with-post Response.Charset = "GBK" ...