Begtostudy(白途思)'s Professional Technology Blog

欢迎访问begtostudy的专业知识博客!主要是专业技术和算法为主。
  首页  :: 联系 :: 订阅 订阅  :: 管理

为什么说 Git 将取代 SVN 做软件版本控制?

Posted on 2010-11-21 12:31  白途思  阅读(840)  评论(1编辑  收藏  举报

请允许我从一个“非编程人员”用户的角度先解释一下软件的版本控制:当若干开发人员组成的团队联合开发一个软件工程时,互相有不同的代码片段任务;他们需要将各自的成果集中起来,并方便随时修改及更新。有时修改后又觉得之前的代码可能更好,需要返回旧版本 —— 这就产生了版本控制的需要。代码集中存放的地方叫“文件库”(repository)。每个程序员都可以随时提取(check out)文件库中的某个文件进行修改,并将修改结果提交(commit/check in)到文件库去。

用来实现这种管理的服务器端程序有多种,下图中就列出了一些版本控制软件。其中 Subversion 就是我们常说的 SVN,它替代了曾经流行的 CSV 而成为主流。但目前看来,Git 将取代 SVN 成为版本控制的最佳工具。

等等,这个话题跟 Joomla 有关系吗?当然有关。因为有些 Joomla 扩展的作者已经开始使用 Git 来管理自己的代码库,如果用户需要下载最新的“开发版”,就必须了解 Git 的用法,通过 Git 来获取想要的文件。 

Git website homepage

什么是 Git?

上图是 Git 官方网站首页的部分截图,里面有英文原版的对 Git 的解释:

Git 是一款免费的、开源的、分布式的版本控制系统。旨在快速高效地处理无论规模大小的任何软件工程。

每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力,不依赖于网络连接或中心服务器。其最大特色就是“分支”及“合并”操作非常快速、简便。

如果你不能理解“分布式”,那么我们看一个简单例子:假如你把开发任务从公司带回家,晚饭后突然有了灵感,要对代码进行修改,不巧家里的电脑不能连接到公司的文件库,你怎么下载要修改的文件?即使你将文件用优盘带回去了,那么修改之后,又怎样提交?SVN 对这种情况没有解决方案,而 Git 可以!因为 Git 在每个用户硬盘上都创建了完整的文件库,不需要、也不存在一个“中心服务器”,你只要能连接上任何一个团队成员的电脑,就能将代码提交到文件库去(有点像 P2P)。

顺便说一下,Git 是由“Linux之父”  Linus Torvalds 创建的。因为他发现找不到满意的方案来管理 Linux Kernel 联合开发的版本控制,就自己写了 Git。

Git 有什么优势?

从网上的用户评价来看,Git 最大的优势就是“快”!对于大型的联合开发项目,用 SVN 进行版本控制管理时速度很慢,但是用 Git 就快很多。

还有一个说法是:SVN 有的功能 Git 都有,而 Git 的某些特色 SVN 根本做不到。

这就足够打动我了。我不是开发人员,无需关心更细节的比较了。如果你有兴趣深入了解,请 Google 之。

Git 如何使用?

Git 本来是面向 Linux 操作系统开发的软件。在 Linux 平台上使用 Git 非常简单,当然都是命令行模式。具体操作指令参看:Git 中文教程

如果你想在服务器上安装 Git,请看 Git 服务器安装 教程。

对于 Windows 操作系统用户来说,借助于 Cygwin 也能运行 Git 的命令行模式。

不过,Windows 的用户当然更喜欢图形界面。因此也就有了:

Windows 平台的 Git 图形界面客户端

目前至少有三款可运行在 Microsoft Windows PC 上的 Git 客户端:Git Extensionsmsysgit 以及 TortoiseGit

msysgit 的优势是带了一个命令行界面(Git Bash),其启动命令也是整合到 Windows 资源管理器的右键菜单上了,如果你对 Git 的命令行模式情有独钟,那么建议你安装 msysgit,在 Win 平台上继续享用 Git 命令行工作模式。

Git Bash of msysgit

安装了 msysgit 之后,在 Windows “我的电脑”中任意一个文件夹上面点击鼠标右键,选择“Git Bash Here”就能弹出上图所示的 Git 命令行窗口。这个启动过程可能需要十几秒钟,请耐心等待。最后看到绿色的 $ 就是命令行提示符。输入 git help git 这个命令并回车,就会在浏览器中打开 msysgit 自带的帮助文档 HTML 页面;要离开命令行时,在 $ 提示符下输入 exit 就退出了。

我亲自用过上述三个中的后两个。感觉 TortoiseGit 是最好用的。是不是觉得 TortoiseGit 这个名字有点熟?它就是 TortoiseSVN 客户端的开发团队制作的。因此用过 TortoiseSVN 的用户能够很快熟悉 TortoiseGit 的用法 —— 实际上,有些人惧怕 Git 而抱着 SVN 不放,就是因为 TortoiseSVN 用起来太方便了。现在有了同样方便的 TortoiseGit,你还怕什么呢?

TortoiseGit 的安装

在安装 TortoiseGit 之前,你的 Windows PC 上仍然必须先安装 msysgit。因为此程序提供了 Git 核心。而且安装顺序是:先安装 msysgit,然后安装 TortoiseGit。如果你弄反了,就必须进入 TortoiseGit 的设置界面(右键菜单上 TortoiseGit -> Settings -> General -> MSysGit -> Path),手动指定 Git 核心文件的位置(例如 c:\Program Files\Git\bin)。

TortoiseGit 下载之后是一个可执行的 .msi 格式安装包,直接双击就能安装到 Windows 上,与资源管理器无缝整合。在任何文件夹上点击右键就能看到它的菜单。它有 64-bit 和 32-bit 两种版本,请根据你的 Windows 操作系统来选择合适的安装包。安装完毕需要重新启动电脑。由于目前还没有中文语言包,因此现在使用 TortoiseGit 的话还是英文界面。

TortoiseGit 可以支持 SSH 加密方式的“上传”,早期版本是借助另一款专门实现 SSH 传输的开源软件 Putty 来实现,用户必须另外安装 Putty,然后在 TortoiseGit 的设定选项中给出 Putty 的可执行文件位置(例如 C:\Program Files\Putty\plink.exe)。现在最新的 TortoiseGit 已经自带了 TortoisePlink.exe(在右键菜单中 TortoiseGit -> Settings -> Network -> SSH -> SSH client)。

TortoisePlink.exe 实际上是 Putty 的 Plink.exe 文件的一个衍生产品,功能上比 Putty 可能要差一些。如果你喜欢 SSH 方式,那么还是建议你安装 Putty —— 没准你的电脑上早就安装了。

提示:通过 SSH 方式访问远程服务器还需要认证密钥(Putty Key)文件,每一个服务器都不一样。请参看 Putty 的相关文档,本文不再赘述。

不过别担心,我们只想通过 TortoiseGit 来下载软件最新版本,就不需要搞清楚这个 Key 是什么,怎么用,一样能达到目标。

请点击“下一页”来看看我使用 TortoiseGit 的实战演示 ——

{mospagebreak_scroll title=TortoiseGit 客户端实战演示&heading=Git 版本控制系统介绍}

用 TortoiseGit 下载远程文件演示

我们以 Joomla! 1.5 平台上的 SJSB 桥接器组件为例,来演示一下通过 Git 下载 SJSB 最新版本的过程。

在 SJSB 官方网站提供了一个 SVN 下载地址:

svn checkout http://sjsb.googlecode.com/svn/trunk/

有意思的是,你通过 TortoiseSVN for Windows 客户端访问该地址后,只下载到一个 README 文本文件,其内容是:

Please use git to get latest version from:
git://src.develer.com/users/woody/sjsb/.git

也就是说,实际上 SJSB 作者已经将原来 SVN 中的代码全部迁移到 Git 文件库去了。上面 git:// 开头的地址就是 Git 的访问地址。

在你的硬盘上某个位置创建一个新目录,例如命名为 sjsb Git,然后在上面点击鼠标右键,在弹出菜单上选择“Git Clone...”,如下图所示:

get Git Clone

接下来就会弹出一个对话框,要你填写该 Git Clone 对应的地址。我们输入 SJSB 作者给出的地址即可:

Git Clone URL

是不是觉得这个对话框很熟悉?酷似 TortoiseSVN 的“检出”对话框。在 URL 一栏填写目标网址,去掉 Load Putty Key 的勾选,然后点击“OK”按钮,就开始了传输远程文件的画面:

TortoiseGit Clone receiving

画面上那个小乌龟怎么是反着的?呵呵,这个画面上的小乌龟一直在翻跟头,从远程图标翻到本地文件夹图标,代表文件不断在传输。我们截图的时候刚好是翻过身去了。进度条下面的方框中显示了 Git Clone 的来源网址及本地存储位置,也显示了文件总数、已收到文件数量、传输速度等参数。

传输完成后,点击 OK 按钮,就结束了对文件库的下载。

下面,我们要将得到的文件导出为可用的 SJSB 安装包。这个过程与 TortoiseSVN 的导出过程也几乎一样:

在 sjsb Git 这个目录上点击右键,这时弹出菜单的内容有了变化,因为这个文件夹已经内含 Git Clone,所以相应的增加了很多菜单项目:

Git Menu Export

在 Git 的右键菜单上选择 TortoiseGit -> Export 就弹出了下面的对话框:

Git Clone Export Dialog

在最上面的 Zip File 那里输入导出文件的文件名,注意不要忘记 .zip 扩展名,否则导出后的结果没有扩展名。该输入框右侧的按钮允许用户自定义一个输出位置。如果不指定,默认是存放在当前 Git Clone 的目录内,即 sjsb Git 这个文件夹里面。

下面的几项都不用去管,选择好文件名之后直接点击“OK”按钮,就开始了导出过程。最终在 sjsb Git 文件夹下生成了一个 zip 文件。打开该 zip 文件,可看到 SJSB 桥接器最新的版本:

Git Clone Export Result

可以看到,文件日期都是 2009年5月2日的,而 SJSB 官方网站上通过 web 界面下载的 1.0.14a 版本其文件日期是2009年3月16日的。进入 com_smf 目录后,在 XML 文件中可以看到版本号是 1.0.15a-dev2。很显然我们已经通过 Git 得到了作者尚未发布的“开发版”。

以上我们演示了 Git 的“下载”过程,如果你想“上传”呢?也很简单!在本地的 Git Clone 中修改了文件之后,可以在总目录上点击右键,选择 Git Commit -> "master"... 这一项即可(注意是一级菜单,不是次级)。

当你在 PC 上拥有了一个 Git克隆 之后,过一段时间肯定需要更新一下,从“主库”(master)中提取别人提交的新文件,并与你自己 PC 上的 Git Clone 合并。这些操作都可以在右键菜单上找到相应的命令。具体用法请仔细阅读 TortoiseGit 的帮助(右键菜单上 TortoiseGit -> Help)。

Joomla之门点评 Git

我曾经用过 Git 的命令行模式,那真是很痛苦的经历。有了 TortoiseGit,就没有任何理由再说 Git 不好了。既然 Git 已经拥有了 SVN 的全部功能并且还有更多独特的优势,我想 Git 取代 SVN 也是一种必然趋势。

或许你的开发团队正准备搭建自己的 SVN 服务器,那么我建议你不妨直接使用 Git 吧,很明显大家将来都会接受 Git 的。

假如你们已经在用 SVN 了,那么建议你参考一下 SVN+Git 鱼与熊掌兼得 这篇文章,可以同时使用 SVN 和 Git,这样也方便团队成员完成平稳过渡。

下载 TortoiseGit for Windows 32-bit Git版本控制系统客户端软件

原帖:http://www.joomlagate.com/article/joomla-review/why-subversion-will-be-replaced-by-git-for-version-control/

前往Begtostudy的编程知识博客(CSDN)