隔离开发,提交审核
如何对团队中的新成员的开发进行审核呢?在Git服务器上可以实现用户自建分支和自建版本库的功能, 这样团队中的新成员既能将本地提交推送到服务器以对工作进行备份, 又能够方便团队中的其他成员对自己的提交进行审核。
审核新成员提交时,从其个人版本库或个人分支获取(fetch)提交,从提交说明、代码规范、编译测试 等多方面对提交逐一审核。审核通过执行 git merge 命令合并到开发主线中。
对合并更好的支持,更少的冲突,更好的冲突解决
因为Git基于对内容的追踪而非对文件名追踪,所以遇到一方或双方对文件名更改时, Git能够很好进行自动合并或提供工具辅助合并。而SVN遇到同样问题时会产生树冲突, 解决起来很麻烦。
Git的基于DAG(有向非环图)的设计比SVN的线性提交提供更好的合并追踪, 避免不必要的冲突,提高工作效率。这是开发者选择Git、抛弃SVN的重要理由。
保证已修复Bug不再重现
以为创建完毕里程碑标签(tag)便完成软件版本的发布是有风险的, 往往会由于之前的版本(维护版本)中的一些 Hotfix 提交没有合并到新版本而造成已修复问题在新版本中重现。
Git分支和合并追踪可以解决这个问题。例如用 maint 分支跟踪新的发行版, 当确定里程碑tag v1.6.4 为新发行版时,在 maint 分支执行如下命令以切换到新发行版:
$ git checkout maint $ git merge --ff-only v1.6.4
如果合并成功,代表发行版 v1.6.4 包含了所有前一个发行版的提交。 反之说明前一个发行版某个或某些Hotfix提交尚未合并到新发行版中。
版本库的安全性
SVN版本库安全性很差,是管理员头痛的问题。
● SVN版本库服务器端历史数据被篡改,或者硬盘故障导致历史数据被篡改时, 客户端很难发现。管理员的备份也会被污染。
● SVN作为集中式版本控制系统,存在单点故障的风险。备份版本库的任务非常繁重。
Git在这方面完胜SVN。首先Git是分布式版本控制系统,每个用户都相当于一份备份, 管理员无需为数据备份而担心。再有Git中包括提交、文件内容等都通过SHA1哈希保证数据的完整性, 任何恶意篡改历史数据都会被及时发现从而被挫败。
更多的十条喜欢Git的理由
更多的十条喜欢Git的理由,参见 《Git权威指南》 第11-21页。
● 异地协同工作
● 现场版本控制
● 重写提交说明
● 无尽的后悔药
● 更好用的提交列表
● 更好的差异比较
● 工作进度保存
● 作为SVN前端实现移动办公
● 无处不在的分页器
● 快
什么情况推荐使用SVN
SVN具有的悲观锁的功能,能够实现一个用户在编辑时对文件进行锁定,阻止多人同时编辑 一个文件。这一悲观锁的功能是 Git 所不具备的。对于以二进制文件 (Word文档、PPT演示稿) 为主的版本库,为避免多人同时编辑造成合并上的困难, 建议使用SVN做版本控制。