工作环境需要,分别接触了 Git 和 SVN 版本控制工具。接触不久,尽管这两种工具都不是很熟悉,目前仅能达到满足简单的工作需求(有时还需要查引擎)。但,还是有一些感受以记录。
分支(branches)与里程碑(tags)
Git 的分支和里程碑很有趣和简单,可以快速地在当前工作区切换不同的分支和里程碑。
SVN 的分支和里程碑本身就是一个目录(拷贝),目录下分别有一个 .svn 的文件夹以存储版本信息。
所以,SVN 切换分支很麻烦,需要切换工作区(每一个工作区只对应服务器的某一分支)。而 Git 却很方便。
集中式与分布式
这个事情和上面的分支和里程碑是有重叠的地方的。
Git 采取的是分布式。简单的说就是每台 checkout 过代码的笔记本上都有着一个完整的代码库。
而 SVN 却是集中式的,只有一个是代码仓库,就是服务器。
所以,Git可以本地提交,SVN需联网提交。
Git 是没有中心服务器的,每个人机器上都是一个完整的库,我们平时开发代码时的中央服务器其实和我们自己机器上的库内容是完全一样的(格式有点不同,是 bare 的)。虽然平时大家都是将代码提交到中央服务器上再统一pull别人的代码,但实际情况你可以总是 pull 张三的库,然后 push 给李四等等操作。
个人认为去中心化是 Git(也包括其他分布式 VCS)最伟大的改变。去中心化意味着没有权威、没有主力,所有人都是平等的。这概念本身看起来好像没什么,但实际对社区影响是巨大的,去看看 http://github.com 上的fork功能,你可以fork任何一个你喜欢的项目,接着按自己的喜好修改成自己的项目,或是发起 pull request 请原作者 merge 你的功能到他们项目里去(这同样也得益于 Git 另一项与 SVN 很大不同的功能——分支策略),而且大多数开源项目都会鼓励你去 fork 它们。这里面没有权威,没有主从,所有人只要有兴趣都可以在其他人的基础上去构建更强大或是更有领域针对性的项目。大家不是为了开发某个项目而来,而是为了贡献更强的功能给社区,这样最终的项目将是整个社区所有人共同努力的结果,将生生世世繁衍不息。
当然,去中心化也可能会引发一些问题,比如 Linux 的各种发行版本有时候让人难以抉择,但相信市场之手会帮我们出选择。
本地版本控制系统
分布式的版本控制系统
集中式的版本控制系统