Git 指南 -- 什么应该被纳入管理?

如果还不了解Git是什么,可以先阅读这篇博文:http://www.cnblogs.com/schaepher/p/5561193.html

是作品,而不是产品

什么是作品?

精心设计,手工打造的。举例:

  • 源代码文件
  • 部分配置文件
  • 文档(包括个人写作,博客等)

什么是产品?

可以批量生产的。举例:

  • 编译、链接产生的临时文件、目标文件、可执行文件
  • 发行的软件包
  • 运行时生成的日志文件、临时文件

如何防止不必要的文件被纳入管理?

.gitignore

在被git管理的目录内,我们可以放置.gitignore文件来让git过滤那些不需要关注的文件。

详细说明及规则请参考:https://git-scm.com/docs/gitignore

资源

Github 已经为各类工程整理了常规情况下需要过滤的文件,可在这里查看:https://github.com/github/gitignore

把与自己工程类型对应的文件内容复制到自己工程的.gitignore中保存即可。

如果已经提交不必要的文件怎么办?

如果是少量的小文件,通常不必做什么,正常删除即可。但是如果不小心提交了不必要大文件,或者非常多的小文件,导致整个git仓库的大小变得难以接受,这时候就需要做清理工作。

注意:无论如何,请先做好备份,避免误操作导致自己的作品丢失!

简单粗暴的方法

如果你有一份远程仓库

  • 需要保留的文件复制出来一份
  • 删除整个本地仓库
  • 从远程仓库重新 git clone 一份下来
  • 把第一步复制出来的文件覆盖进去,再提交

如果你在本地已经有多次提交并且没有做git push,会使得这部分提交记录丢失,但是留住了最新版本+已经push到远程的版本!

优雅的方法(有点复杂)

如果你很清楚要移除那些文件

  • 删除并重写提交记录
    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch xxx'

其中xxx填写你要删除的文件名,当然也支持通配符,如:*.tar.gz 匹配所有的后缀名为 tar.gz 压缩包。

  • 删除引用
    rm -rf .git/refs/original/
    rm -rf .git/logs/
  • 垃圾回收并清理
    git gc
    git prune --expire now

如果你不知道是哪个文件占用那么大空间(比如这个文件已经在当前版本被删除了,但是历史版本里存在),请参考文档:移除对象

Git 指南 -- 什么应该被纳入管理?的更多相关文章

  1. git指南目录

    git指南目录 发表回复 蓝色表示未阅读,棕色表示阅读过,绿色表示阅读过但不太理解 1. 起步 1.1 关于版本控制 1.2 Git 简史 1.3 Git 基础 1.4 安装 Git 1.5 初次运行 ...

  2. 使用VSTS的Git进行版本控制(七)——管理仓库

    使用VSTS的Git进行版本控制(七)--管理仓库 在团队项目中创建Git repo管理项目的源代码.每个Git repo都有自己的权限和分支,可以与项目中的其他工作隔离开来. 任务1:从web门户创 ...

  3. SVN里直接把本地目录纳入管理

    如果本地有个已有的目录,要直接纳入SVN管理,怎么办呢?直接在Repository Browser里面 Add folder,但这样虽然把目录加到SVN,但本地目录没有纳入管理,你还要重新又下到本地才 ...

  4. 5-15 devise(git指南,部分认为重要的内容的译文)

    git指南:https://github.com/plataformatec/devise 维基百科上有how to 的很多文章. Stackoverflow有大量问题的答案. 全的文档devise: ...

  5. Git 学习(七)标签管理

    Git 学习(七)标签管理 发布版本时,通常会先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.取出某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. ...

  6. Git 学习(六)分支管理

    Git 学习(六)分支管理 几乎每一种版本控制系统都支持分支.使用分支意味着你可以从开发主线上分离开来,然后不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录 ...

  7. git学习(5)分支管理(续)

    git学习(5)分支管理(续) 1.解决冲突 冲突的产生 如我们在新建分支和原来master分支上对同一文件做了修改并提交,在合并分支的时候就会遇到冲突 比如我新建了分支myBranch,在这个分支上 ...

  8. 基于Git的数据库sql文件的管理——完美解决团队sql操作协同问题

    目录 基于Git的数据库sql文件的管理--完美解决团队sql操作协同问题 1.产生背景 2.之前没用Git管理数据库出现的问题 2.1 用同一个库调试带来的问题 3.解决方案 3.1 Sql文件的创 ...

  9. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

随机推荐

  1. Linux - 简明Shell编程05 - 条件语句(Case)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash var=$1 # 将脚本的第一 ...

  2. DOS批处理中%cd%和%~dp0的区别[forward]

    DOS批处理中%cd%和%~dp0的区别   在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0.      这两个变量的 ...

  3. Jsp敏感词过滤

    Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...

  4. Android Studio 实用调试技巧

    Android Studio 是个发工具,其自身带调式环境是很强大的,我们要摆脱只会使用Log打印日志的低效的方法,掌握高级调试技巧对每个Android开发者都是很必要的,废话少说,直入正题 调试方式 ...

  5. WebService核心文件【web-config.wsdd】调用操作

    WebService核心文件[server-config.wsdd]详解及调用示例 作者:玛莎拉蒂-小贱人 一.准备工作 导入需要的jar包: 二.配置web.xml 在web工程的web.xml中添 ...

  6. 转载:细说Cookie

    细说Cookie 转载:http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 阅读目录 开始 Cookie 概述 Cookie的 ...

  7. 【Zookeeper】3.4.9 基本配置

    [hadoop@master1 ~]$ cat zookeeper/conf/zoo.cfg # The number of milliseconds of each tick 每个心跳的时长 单位为 ...

  8. 2017-4-25/设计缓存(LFU)

    1. 恒定缓存性能有哪些因素? 命中率.缓存更新策略.缓存最大数据量. 命中率:指请求缓存次数和缓存返回正确结果次数的比例.比例越高,缓存的使用率越高,用来衡量缓存机智的好坏和效率.如果数据频繁更新, ...

  9. APUE 2 - 进程组(process group) 会话(session) job

    进程组(process group) 进程组顾名思义是指一个或多个进程的集合.他们通常与同一个job(可以从同一个终端接收信号)相关联.每个进程组拥有一个唯一的Process Group Id.可以使 ...

  10. VMware Workstation 12 Pro 之安装林耐斯StartOS X64系统

    VMware Workstation 12 Pro 之安装林耐斯StartOS X64系统... ---------------- 先去下载系统暗中包ISO   网址:http://www.xiaza ...