投资菜地

屋后的一亩三分绿色菜园地

2017-11-13

文件版本控制

实现文件版本控制

实现云内容管理系统:包括网页、图片、音/视频、样式、脚本和其它文档的管理。实现文件的创建,修改和分享。 需要确保云中的数据的安全可靠,历史修改可以跟踪。一个简单易用,速度快支持分布的版本控制就相当重要。

什么是版本控制?

版本控制是指通过比较和跟踪文件内容的变化以便将来查阅文件的变更,随时回滚到之前某个时间点的状态。

确保数据安全

版本控制需要记录每个文件更新的全部信息,而不是只记录文件变更的部分。 用户每次更新时,系统都纵览一遍所有文件并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化系统不会再次保存,而只对上次保存的快照作一链接。

提交流程

  1. 遍历工作目录中所有文件
  2. 生成新版本快照
  3. 与最近版本比较差异
  4. 如果有差异,则提交新版本号(版本树)到本地库

回滚流程

  1. 打开版本树查阅历史版本
  2. 指定历史版本,获取版本中的文件结构
  3. 将链接中的文件和文件目录写加到工作目录

数据结构

版本树

Id:版本Id PId:父版本Id Auth:作者 Time:时间 Comments:备注

版本

Path:路径 Data:数据(文件名,以逗号分隔)

数据

压缩后的数据,以md5命名

使用方法

  1. git get
  2. git set
  3. git diff
  4. git push
  5. git pull

git filter-branch –force –env-filter ‘ if [ “$GIT_COMMITTER_NAME” = “zhumw” ]; then GIT_COMMITTER_NAME=”zhumw”; GIT_COMMITTER_EMAIL=”zhumw@mti-sh.cn”; GIT_AUTHOR_NAME=”zhumw”; GIT_AUTHOR_EMAIL=”zhumw@mti-sh.cn”; fi if [ “$GIT_COMMITTER_NAME” = “gaojin” ]; then GIT_COMMITTER_NAME=”gaojin”; GIT_COMMITTER_EMAIL=”gaojin@mti-sh.cn”; GIT_AUTHOR_NAME=”gaojin”; GIT_AUTHOR_EMAIL=”gaojin@mti-sh.cn”; fi if [ “$GIT_COMMITTER_NAME” = “haorengao” ]; then GIT_COMMITTER_NAME=”haorg”; GIT_COMMITTER_EMAIL=”haorg@mti-sh.cn”; GIT_AUTHOR_NAME=”haorg”; GIT_AUTHOR_EMAIL=”haorg@mti-sh.cn”; fi if [ “$GIT_COMMITTER_NAME” = “yushouling” ]; then GIT_COMMITTER_NAME=”yusl”; GIT_COMMITTER_EMAIL=”yusl@mti-sh.cn”; GIT_AUTHOR_NAME=”yusl”; GIT_AUTHOR_EMAIL=”yusl@mti-sh.cn”; fi’ – –all

git push –force –tags origin ‘refs/heads/*’

开源项目(更多)