`

版本控制——非SVN管理图片和声音文件

    博客分类:
  • ios
 
阅读更多

Jin最近负责的英语学习产品就快要上线了,这款新产品是公司的主产品。按照公司规定,必须通过测试部门的最终测试才能正式发布!按照以往的经验,Jin填写了一份测试申请,上面很详细的写出如何更新数据库,如何从SVN中更新代码到服务器,还有如何复制图片和声音文件。对于新产品的上线,Jin还是很重视的。

 

Jin把测试申请提交到小宋那里,小宋回复说测试申请审核通过,就可以测试和发布。小宋是一个个子不算高,很年轻的阳光男孩。他刚刚当上测试部经理不久,能在20岁冒头就当部门经理,Jin觉得他很幸运。新官上任三把火,小宋最近经常被更高级的领导训斥,真是阳光遇挫折,猛虎遇群狼。小宋告诉Jin,测试申请不合格,被打回!听完这话,Jin就是一愣。测试申请按照规定格式填写的,怎么会不合格呢?小宋给Jin看了高级领导老陈的谈话记录,老陈说:“任何需要测试和发布的内容,都必须有版本控制!而Jin提交的测试申请中,图片和声音文件根本没有进行版本控制”。看到这里,Jin心想,看来图片和声音文件也要签入到SVN。继续往下看老陈的说的:“使用SVN管理二进制文件是错误的!而且图片和声音文件足有好几个G,全部放到SVN进行管理,会笑死人”。按照常理,Jin肯定会开始抓狂,脾气就像山洪暴发一样……不过这次Jin没有这样。

 

老陈,据传说是一个超级牛人,在某大公司做过高级主管,还参与过Linux内核开发。这次是和公司老总一起出来创业,掌握着产品质量关。老陈平时不苟言笑,带着一副很深的眼镜,看起来是个知识分子。另外据说,老陈对Jin赞赏尤佳,所以应该不是在刁难自己。基于以上两点,Jin心里还保持着一种平和。再怎么说也不能得罪一个自己的牛人粉丝。

 

即要对声音和图片进行版本管理,但又不能使用SVN!这简直就是一对矛盾。Jin怎么也想不明白,最后实在没招了,只好鼓起勇气当面去问老陈。老陈的答复倒也挺简单,他说自己只要结果,不管我怎么进行版本控制。只要能进行版本演算,能回朔就可以!Jin听到这里,还是感觉不理解,但是也不好再多问什么了。回到自己座位上,Jin思来想去,渐渐觉得版本演算和回朔,应该是版本控制的一个关键。不使用SVN,应该也可以达到同样的目的。于是Jin写出了以下文字:

 

概述

为了能够回朔每次修改的内容,单词图片和声音文件也需要进行版本控制!但是使用SVN进行版本控制,并不合适。原因有两个:一是图片和声音文件都属于二进制文件,无法比较也没有必要比较版本之间的差异;二是图片和声音文件数量很多且体积也很庞大,全部加在一起有2G多,签入或签出到SVN会非常耗时;

 

解决方法

介于以上两个原因,采用目录结构来进行版本控制。具体目录结构如下:

* 基础版本目录

用于存放最原始版本的文件。该目录命名为base;

* 版本列表目录

用于存放每次修改时添加的新文件和删除的旧文件。该目录以日期格式命名,例如20100310。添加的新文件将被放置在insert目录中,例如20100310/insert,删除的旧文件将被放置在delete目录中,例如20100310/delete;

* 结果目录

用于存放演化结果文件。该目录命名为result;

 

整体目录结构形式如下:

 

root/

 |

 +-- base/

 |

 +-- 20100310/

 |      |

 |      +-- delete/

 |      |

 |      +-- insert/

 |

 +-- 20100311/

 |      |

 |      +-- delete/

 |      |

 |      +-- insert/

 |

 +-- result/

 

举个例子:

在base目录中存放着A.jpg、B.mp3、C.flv,那么演化结果如图1所示:

 

 

(图1)从基本版演变结果

 

在2010年3月10日,更新了A.jpg并添加了D.gif,那么演化结果如图2所示:

 

 

(图2)从20100310版本演变结果

 

注意,更新操作被认为是删除和插入的组合操作!先删除后插入。

在2010年3月11日,删除了C.flv并添加了E.flv,那么演化结果如图3所示:

 

 

(图3)从20100311版本演变结果

 

从基础版本演变

我们可以从基本版本开始,以向下迭代的方式演变到任何指定的版本!其算法过程是:

  1. 读取基本版数据,作为演算基础;
  2. 遍历第1个版本,读取delete目录中的内容,将这些内容从基本版数据中删除;读取insert目录中的内容,将这些内容插入到基本版数据中;
  3. 重复第2步,遍历第2、3、4……、N版本;
  4. 最终结果将存放在result目录中;

 

从结果回朔

我们可以从结果开始,以向上迭代的方式回朔到任何指定的版本!其算法过程是:

  1. 读取结果数据,作为回朔基础;
  2. 遍历最后版本,读取insert目录中的内容,将这些内容从基本版数据中删除;读取delete目录中的内容,将这些内容插入到基本版数据中;
  3. 重复第2步,遍历倒数第2、倒数第3、倒数第4……、倒数第N版本;
  4. 最终结果将存放在result目录中;

 

 

Jin重新填写了一份测试申请,在说明如何复制图片和声音文件的地方标准了版本号,这回顺利通过。Jin有了一个总结,工作中领导并不是要有意为难自己,和作风严谨的领导交谈,必须保持头脑清醒。如果领导真的是有意为难自己,那么也要顶住!因为这正是自己成长的机会。

 

用目录结构解决版本控制的方法有了,下周还要给老陈写一个小工具代码……

分享到:
评论

相关推荐

    SVN版本管理规范

    集中式开发——基于 Trunk 的开发和分散式开发——基于 Branches 的开发是两种常见的版本管理流程图。集中式开发方式简单,但代码对于多个不同的项目,不同的需求只有一份代码,正在修改中的代码不能很好地响应紧急...

    利用SVN和AltiumDesigner进行PCB版本控制设计

    当PCB工程纳入到SVN版本控制管理后,用户在后续对项目中任何文件进行修改后,存储后软件将在文件的目录树中提示一个红色的叹号,表示文件有被改动过。 然后将修改后的文件提交到版本控制库中。提交完成后,我们可以...

    南邮软件工程实验——SVN管理

    【实验报告】 软件工程实验——SVN管理 一、实验目的 本次实验旨在让学生深入了解和掌握...通过本次实验,学生将对SVN有深入的理解,并能熟练运用SVN进行版本控制和团队协作,为今后的软件开发工作打下坚实的基础。

    SVN解除版本控制工具

    WINDOWS 批处理文件,能有效解除SVN版本控制,去掉对有SVN标志文件夹的操作限制。使用时把它放在你要解除SVN控制的文件夹下面,点击运行一下即可

    SVN插件——版本控制工具

    它允许开发者在项目开发过程中跟踪和记录文件的修改历史,便于团队协作和代码版本管理。在这个"SVN插件——版本控制工具"的压缩包中,包含的是与MyEclipse集成的SVN插件的相关文件。 `subclipse.link` 文件可能是...

    EA中SVN进行版本控制设置步骤

    SVN是Subversion的缩写,它是一个开源的集中式版本控制系统,用于管理文件和目录的更改历史。通过SVN,开发者可以在不同的时间点创建文件的快照,并能够查看、比较、恢复这些快照,确保团队间的协作顺畅无阻。 接...

    PowerBuilder 通过SVN实现版本控制操作说明

    ### PowerBuilder 通过SVN实现版本控制操作说明 #### 一、概述 本文将详细介绍如何在PowerBuilder项目中实现SVN版本控制,并以PowerBuilder 11.5为例进行具体说明。通过本教程,读者可以了解如何配置环境、创建SVN...

    eclipse——svn插件

    在软件开发过程中,版本控制是非常重要的一环,而Subversion(SVN)正是一个流行的选择,用于管理代码的版本历史和协同工作。在Eclipse中集成SVN插件,可以方便地进行代码的版本控制操作,如提交、更新、合并等。 ...

    版本控制工具-SVN使用教程

    版本控制工具-SVN是版本控制系统中的一种,它提供了对项目的备份和还原功能,允许多个用户通过特定方式访问相同的文件和文件夹,追溯变更,权限控制,节点管理等功能。 版本控制工具-SVN的主要作用是: 1. 提供了...

    版本控制方案(SVN)

    * 高效的目录版本管理和元数据版本管理 * 事务支持和高效的分支和标签操作 * 透明的网络传输实现 * 可以管理软件工程项目中的源代码、配置文件和其他项目文档 * 可以管理企事业单位办公环境中的各类公文 三、SVN 的...

    SVN版本管理详解-08210246.pdf

    SVN是CVS(Concurrent Versions System)的后继者,并且它是一个开源的软件版本管理工具,被广泛用于软件开发中以协助代码的版本控制。它在管理信息变化中扮演着关键角色,不仅限于软件开发,也适用于任何需要频繁...

    服务器安装文件——SVN

    在这个"服务器安装文件——SVN"的压缩包中,很显然包含的是用于在一台机器上搭建SVN服务器所需的所有组件和指南。 1. **SVN服务器安装**:安装SVN服务器通常涉及到以下几个步骤: - 首先,你需要选择一个操作系统...

    最新SVN版本控制带汉化

    1. **版本管理**:SVN记录每一步修改,可以随时回滚到任何历史版本。 2. **团队协作**:多人同时开发同一项目,避免了代码冲突,提高了效率。 3. **代码审查**:通过查看提交历史,可以进行代码审查,提升代码质量...

    删除当前目录下的所有.svn版本控制文件

    这个批处理工具放到当前目录下,双击就会删除当前目录以及子目录下的所有svn 版本控制信息。

    删除SVN版本控制文件批处理

    注意,此操作将永久删除SVN的所有版本控制信息,使文件和目录变为普通非版本化的状态,无法再通过SVN进行版本管理。因此,在执行前务必备份重要数据,以免造成不可逆的损失。 总结来说,删除SVN版本控制文件主要...

    SVN版本控制原理SVN版本控制原理

    SVN版本控制原理SVN版本控制原SVN版本控制SVN版本控制原理原理理SVN版本控制原理

    svn操作手册 svn版本控制

    通过深入了解SVN的基本概念、核心功能以及实用操作指南,编程爱好者和开发者可以更高效地利用版本控制系统,提高团队协作效率和项目管理水平。无论是个人项目还是大型团队合作,SVN都是一个强大而可靠的工具,值得每...

    SVN版本控制清除工具

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许团队成员协同工作,记录每次更改,以便于回滚错误,查看历史版本,并管理多个开发分支。在某些情况下,可能需要清理文件夹...

    SVN插件,版本控制插件

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件的历史变更。在软件开发过程中,SVN插件是开发者不可或缺的工具,它集成到开发环境如Eclipse中,使得版本控制操作更加便捷高效...

    SVN版本控制工具以及介绍.

    版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中, 确保由不同人所编辑的同一档案都得到更新。 版本控制透过文档控制(documentation control)记录程序各个模组的改 动,并为每次改动编上序号。...

Global site tag (gtag.js) - Google Analytics