版本管理和项目管理软件浅谈
版本管理和项目管理软件浅谈
项目管理软件
Trac vs Redmine
关于Trac,之前想为计组实验平台搭建Wiki的时候作为“备胎”所了解过,而与当时功能与其相似,看起来更有竞争力的产品——Redmine相比而言我更加看好Trac,因为Redmine有一些严重的缺点:
- 安装非常麻烦。在实际的生产环境中,Redmine在Debian\Ubuntu系统下没法稳定运作。Redmine的依赖是固定的,所以一些新的版本库可能没法工作。而且必须自己在apt-get中配置更新源,否则很容易错将某些依赖升级后Redmine就没法用了。
- 备份方面的管理很复杂。在Trac一行就能解决的事,在Redmine里你需要单独备份配置文件,修改过的文件以及数据库内容。不过Redmine支持多个项目的管理,这方面来说比Trac好一些。
- Redmine的wiki功能比较差,有比较多的漏洞。
Redmine有一个优点就是其文档管理十分简约,直接将文件上传到Redmine的管理平台即可。
而且虽然Redmine不好安装,实际上Trac的安装也不简单,比如像必须手动创建数据库等。
但是针对于插件系统这方面来说的话,Trac对插件的支持和兼容性要比Redmine更好一些,虽然两者都会发生插件被孤立而不被框架支持的情况。但是Trac插件发生问题的概率更小。
TFS & Bugzilla
TFS是一个软件开发生命周期的解决方案,相比而言SVN和Git只是用来项目源代码的版本控制系统而已。TFS还有诸如问题追踪、文档管理、报告生成以及虚拟实验、测试等功能。TFS很契合地集成到了Visual Studio中,作为VS的一大助手也发挥了很大的作用。TFS非常适合纯软件型的项目开发,而且适合基础资源到位的情况下进行推进和开发。当然在前期需求收集和策划的时候就开始使用,也是完全没问题的。TFS对于敏捷开发的团队来说十分有利。
而Bugzilla是个bug tracking system,即一个开源的缺陷跟踪系统。它可以管理软件开发中缺陷的提交,修复,关闭等,贯穿了软件开发的整个生命周期。这一点与TFS很相似。它也历史变更记录、跟踪与描述BUG、丰富多样的配置设定。但是和TFS比起来,它不能管理测试计划、测试用例、需求等,这一点是其不足之处。
源程序版本管理
Git vs SVN
Git是世界上最先进的分布式版本控制系统。由于上学期操作系统实验使用过Git,所以对Git的优点和缺点有比较深的体会。
而提到Git,我们常常用来与之对比的就是SVN。
实际上类似于探讨这两个的区别的文章有很多
纯粹以个人的眼光来看,我觉得Git和SVN的主要区别在于以下几点,这几点同时也昭示了Git和SVN的不同之处:
- Git是分布式的版本控制系统,而SVN不是。
- 分布式可以看作是Git相对于SVN在用户体验上感受最深的一个区别。虽然Git不是独一家做分布式模式的版本控制系统,但是Git在这方面上做得很好,有许多强大的功能。
- Git可以做到即使没有网络,我们依旧可以提交文件,查看历史版本记录,创建项目分支以开发新的功能。在没有网络的环境里,SVN就只能说再见了。
- 但是这个不联网无法使用的特性,我觉得也是SVN适合于部署在大型公司内网服务器里的原因。尤其是一些商用大型软件的公司,除了公司内网与保密机构存储源码,其它地方就不可能有版本库的克隆副本了。
- 当然分布式更多的好处不是仅仅局限于联网的问题,分布式也相当于多层备份。比如哪一天我手一抽把远程仓库和本地版本库里的东西都删干净了,除了使用Git强大的版本记录还原外,还可以让任何一个克隆过远程版本库的人重新推送到远程仓库里。这样源码存在的安全性将大大提高。
- Git的版本记录是靠其强大的Hash数据,而SVN却是按文件。
- 只要是对Git稍有研究的人就知道Git的版本回退效果之强,不仅可以穿越去过去,还能从过去再穿越回来。这样堪称时光机一般的技能却只需要一个.git文件夹,很小的体积就可以存储每一次版本的变化。
- SVN我不是很了解,但是按照其原理介绍所说,其版本控制是资源控制来操作的。将文件的元信息隐藏在.svn的文件夹里,更重要的是,.svn文件夹的体积比.git的体积要大很多,需要存储很多的冗余信息。
- Git的分支与SVN的分支。
- Git的分支常用于单独功能开发,开发后再跟master合并。并且常常可以使用三个分支来控制版本的stable,release,debug版本。Git的分支合并也非常简单便捷,在有冲突,冲突合并时Git会提示明显的信息以人工简易合并信息。
- 但是在SVN中一个分支就类似于版本库中的另外一个目录,由于确认分支合并需要使用复杂的命令,所以经常会有分支被遗漏的情况。
- Git缺少容易阅读的版本号。
- 这是Git相比于SVN缺少的一大特征。SVN的版本号是任何一个相应时间的快照,但是Git都是使用SHA-1值来唯一标识代码快照,它们用途一致,但是相比起来SVN的版本号更容易阅读。
Github 和 Gitlab、Gogs
Github,Gitlab都是使用Git作为分支版本控制系统的,但是它们俩的区别之处在于Github主要用于开源项目的参与与维护(当然Github有付费的企业级服务也很厉害),但是Gitlab更倾向于在内网服务器上架设的私有库。之前在了解Gitlab的时候还找到了一个使用go
语言编写的由无闻带队开发的十分轻便的一个Git私有库。其是模仿Github和Gitlab而写的,但是十分轻便,是个开源项目。当然重点在于它是国产的!当然拜go
所赐,其拥有优秀的跨平台性能。