为何改用Git
Subversion 用得好好的,为什么要改用 Git 呢?
记得刚开始用 Subversion 时,它在 Windows 平台上的工具也还不是那么方便,光是安装就要手动设定一堆东西。现在,Subversion 服务已经几乎是点下一步、下一步的方式就能安装完成了,非常方便。而且,现有的软件项目、写作等工作,也都在是用 Subversion 来管理版本。在已经投资不少学习成本、且用得很习惯的情况下,要换另外一套版本管理系统总是会有一些阻力。
更顺畅的工作流程
其实我 lag 很久了。没有改用 Git,主要就是因为习惯问题,以及考虑到已经付出的学习成本,和没有一个让我觉得非换不可的理由。但是最近由于经常使用笔记本电脑,而且网络经常碰到无法连线的状态(有时候是笔电所在的环境无法连网,有时候是服务器离线),以至于有些本机的修改成果无法立即 commit 成一个修订版次。这个时候,如果我还要继续修改别的东西(例如,修正另一个 bug),往往就会跟刚才的修改混在一起 commit,而且是要等到可连上网络时才能 commit。这样的时间差,很容易造成一些遗漏或混乱,无形中就增加了成本和风险。我希望就算无法连接服务器,还是能够依目前的进度先 commit,并且继续做后续的修改,这样我就不用在那里空等,也不用担心自己等到网络可连线时,已经忘记那些档案的 commit 先后次序。Git 可以做到这点。
快速
Git 之所以反应迅速,主要是因为分散式架构的缘故。在此架构下,版本库的完整历史全都在本机上。因此,就算要进行历史版本比对,也都是在本机进行,速度当然比需要实时连线的 VCS 来得快。
版本库毁损的风险较低
同样是基于分散式架构的缘故,Git 的版本库会在各用户端机器上存在多个完整的复本,因此就算服务器上的版本库损坏了,还是可以利用其他用户端机器的复本轻易复原,大幅降低版本库备份的成本和档案遗失的风险。
弹性的本地分支
在使用 Subversion 时,分支其实就是把档案复制到另一个文件夹,然后在不同的分支(文件夹)之间切换。在试过 Subversion 的分支之后,我还是有怕怕的感觉,因而倾向尽量少用。因为我觉得自己有一天一定会不小心把分支和主线给弄混了,以至于出现版本错乱的情形。
我还没有实验 Git 的分支功能,但从现有的一些技术文件看来,Git 分支的一个主要优点,就是它可以完全在本机进行。比如说,你可以在本机建立几个实验性质的分支,等到你觉得时机成熟了,便可以将特定分支推送至主机,分享给别人。或者,有些实验失败的分支,也可以直接在本机砍掉,而其他开发人员根本不知道曾经有这些分支。
其他优点
个人是觉得 Git 还有一个小地方比 Subversion 好:它的版本库目录结构。
当我从远端 Subversion 服务器 checkout 一个版本库到本机时,在本机的工作目录下,每一层子目录都会有一个 .svn 的资料夹,作为版本控制之用。Git 不是这样。当我从远端服务器 clone 一个 Git 版本库到本机时,就只有该版本库复本的根目录底下会有一个 .git 目录,其他子目录则很「干净」。此外,它的档案忽略清单只要由 .git 目录下的一个名为 .gitignore 的档案就能完全控制。虽然是不太起眼的差异,我却觉得蛮好的。大概是有点洁癖的缘故吧 XD
原文需国内或许不能访问,哎
http://huan-lin.blogspot.com/2011/05/why-git.html