这应该算个相当纠结的问题.
2年前,还没有备份的概念,因为那时候的工程,用笔头和笔记本就足够记录修改历史了.区区几十个文件,就装一个文件夹,看日期都能看出来.
后来,发现了SVN,一个相当容易上手的工具,做的也很智能.用过后,感觉一下子轻松不少.可以很清晰的记录每个阶段的修改历史.再也不用每修改个文件,都得cp .bak,最后搞的到处是bak, 完全不用担心修改了文件回不来...放心大胆的改吧!
半年前,代码量越来越大,SVN显得相当吃力,CO Commit居耗资源,并且大量的磁盘空间也被SVN吞噬.最可恶的是,文件一多,SVN就犯傻,一些非文本的文件常常冲突,不得不一级级的Clean Up,可气!是该被踢掉的时候了.
想到了GNU钟爱的Git,Kernel什么的都用它, 想必是非常强大了..可是.看过介绍,就觉得Git强大的在其版本追踪,分布管理,而并非我想要的清晰的修改历史,加上其相当"晦涩"的命令行,除了速度,估计不必SVN有多好,遂放弃!---可惜还没试用过,不知道是不是我的错觉.
再想到的就是Linux的Patch.速度肯定没的说,系统自带用起来也方便,而且patch包发布很小,同时也记录了修改历史.不过等到真的用起来的时候, 发现还有点麻烦, 一个是工程生成的中间文件,没有很好的过滤,再者,对于非文本的文件,lib之类,无能为力了..--或者是我没有发现正确的方法--哎,不得以,放弃.
继续发掘,又想到的rsync,相当强大的同步工具,而我不需要同步,我想用其强大的差异对比算法,将差异保存出来.不过这次还是得放弃, 浏览完这个man page,没发现 其可以实现将差异打包的功能!!实在没整,时不时得去研究其源代码呢?哎,劳神伤脑,放弃之!!
今日,闲逛时,突然想到了老实本分的tar, 要是这个能实现,不就完美了!tar的过滤,更新功能是没话说,可以很好的过滤中间文件,可以touch到每个文件的修改日期...
baidu之,加上man了一把,发现还真可行.
tar 的 -g/G
-G, --incremental handle old GNU-format incremental backup
-g, --listed-incremental=FILE
handle new GNU-format incremental backup
--ignore-failed-read do not exit with nonzero on unreadable files
以原始工程作snapshot.增量打包.发布时发布原始包,以及最近一次差异打包!
不过,这样也有一些问题:work目录删除了文件/文件夹,发布以后更新不会删除---不过这个可能性较低,大不了不删就得了~~另外以后就是"回滚"不是很方便,除非是cp完整一份原始工程,在tar要恢复的差异包,此外就是必须保留一份原始工程!!不过想到速度上应该是SVN的n数量级倍,占用点空间,就不考虑了!
好.Just Do it! 下周实践一下.再来更新Usage!
阅读(1387) | 评论(1) | 转发(0) |