IT技术博客大学习 共学习 共进步

为何改用Git

淡水河边的博客 2011-06-21 13:50:58 浏览 4,861 次

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

建议继续学习

  1. Git常用命令备忘 (阅读 54,503)
  2. Git log diff config高级进阶 (阅读 24,721)
  3. Git subtree 要不要使用 –squash 参数 (阅读 23,284)
  4. 我的git笔记 (阅读 20,084)
  5. Zend Studio集成Git使用 (阅读 8,861)
  6. 最近总结的一些技巧(vim,python,svn,fiddler等) (阅读 8,102)
  7. Git commit 注释格式 (阅读 6,802)
  8. SVN Hook造成SVN提交速度慢的问题 (阅读 6,162)
  9. GIT和SVN之间的五个基本区别 (阅读 5,742)
  10. Git安装使用手记 (阅读 4,921)