Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,作者把他描述为一个“傻瓜式的版本管理系统”,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius和Merb在内的很多知名项目都使用了Git。Git同样可以被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。使用GIT系统,不需要像SVN那样搭建一台SVN服务器来存放代码库。
一、为什么选择Git
对于流行的软件版本开源管理软件,元老级的CVS、后来新秀的SVN,今天我在CHIP.CN Dowload中看到了一篇文章:《2008年度最佳开源软件大奖》(http://download.chip.eu/cn/standardbeitrag_cn_3640079.html)。其中提到了GIT版本管理系统。
我很奇怪,为什么SVN没有入围并获奖呢?当初,我在从CVS转移到SVN时就曾经就SVN的一系列优势进行过一些粗浅的学习。SVN在版本库的管理上较CVS有明显的优势。那么与SVN相比,GIT的优势又在哪里呢?
经过强大的Google,我从网上找到了这些内容:
From 《Git入门教程》:(http://hi.baidu.com/eehuang/blog/item/37af8d54242d6351564e00b5.html)
1. 傻瓜都会的初始化,git init, git commit -a, 就完了。对于随便写两行代码就要放到代码管理工具里的人来说,再合适不过。也可以拿git做备份系统,或者同步两台机器的文档,都很方便。
2. 绝大部分操作在本地完成,不用和集中的代码管理服务器交互,终于可以随时随地大胆地check in代码了。 只有最终完成的版本才需要向一个中心的集中的代码管理服务器提交。
3. 每次提交都会对所有代码创建一个唯一的commit id。不像CVS那样都是对单个文件分别进行版本的更改。所以你可以一次性将某次提交前的所有代码check出来,而不用考虑到底提交过那些文件。(其实SVN也可以做到这点)
4. branch管理容易多了,无论是建立新的branch,还是在branch之间切换都一条命令完成,不需要建立多余的目录。
5. branch之间merge时,不仅代码会merge在一起,check in历史也会保留,这点非常重要。
From gitHost.cn
1、更方便的 Merge
分布式管理必然导致大量的 Branch 和 Merge 操作。因此分布式版本控制系统都特别注意这方面。在传统的 CVS 里面制作 Branch 和 Merge 简直就是噩梦,Subversion 作为一个用于替代 CVS 的系统,专门改进了 Branch 操作。然而似乎人们没有注意到,Branch 是轻松了,可是 Merge 呢?如果不能很方便地 Merge 回来,做 Branch 仍然是噩梦。事实上,我就经历过在开发团队里面由于队友操作不对而在 Merge 的时候把我的许多代码都覆盖掉了。当时正是使用的 subversion 。虽然源代码仍然在历史里面,但是要去一个一个地找出被覆盖掉的文件并恢复过来确实是一件很难忘的事情。
2、更方便的管理
传统的版本控制系统使用中央仓库,一些仓库相关的管理就只能在仓库上进行。赋予开发团队每一个人中央仓库的管理权限是非常不好的。但是有时候确实会比较不方便的地方。
3、更健壮的系统
分布式系统一般情况下总是比单服务端的系统要健壮,因为但服务端一旦服务器挂掉了整个系统就不能运行了。然而分布式系统通常不会因为一两个节点而受到影响。
4、对网络的依赖性更低
虽然现在网络非常普及,但是并不是随时随地都有高速网络,甚至有时候根本没有网络可以访问。低速的网络会让人心情烦躁,有时候就呆呆地盯着屏幕上的 commit 进度,什么事情也干不了。而没有网络连接更是致命的:你无法 commit !这表示你进行任何改动以前都必须小心翼翼,否则你可能再也找不会你曾经写的一些代码了。
5、更少的“仓库污染”
有时候你要做一个模块,它不是太大,所以没有必要为它新建一个 branch ,但是它又不是那么小,不可能一次提交就做好。于是便会提交一些不完整的代码到仓库,有时候会导致整个程序无法运行,严重影响团队里其他人的开发。大多数人在这种情况下的解决办法都是写完之后再提交。但是作为习惯了版本控制的人来说,进行不计后果的大幅修改是经常的事情,到后来突然发现自己先前的代码没有提交,就后悔莫及了。如果是分布式系统的话就不会存在这样的问题,因为本地仓库的修改不会影响到别人的仓库。当你完成并测试以后,就可以在邮件列表里面说:我已经把这个模块做好了。然后感兴趣的人就可以从你这里 pull 你的成果了。
虽然网上各种对Git的誉美之词决不止于此,但是在Git的主站上,还是尽可能客观的对Git和Subversion进行了一番比较。(GitSvnComparsion :http://git.or.cz/gitwiki/GitSvnComparsion)。另外,Subversion目前通过SVK也已经提供了一定程度上的源代码库分布式的管理能力。能够实现源代码的离线提交等功能。
二、在Windows上的使用Git
不得不说,Git是为Linux而生的。(废话,Git的最初创建人就是Linux的创始人啊)。在Linux环境下,要使用Git,与任何Linux中的命令行工具没有什么区别。甚至在击键数上还有明显的优势。在Windows上要使用Git在目前看来只有两种方法:使用Cygwin(一个在Windows上运行的Linux环境)或者使用msysgit(http://code.google.com/p/msysgit/)。Cygwin和msysgit的使用方法类似。Cygwin具有大量Linux的功能,如果只是想使用Git功能的话msysgit还是最简单和快速的方法。下面的介绍将以msysgit为主进行。
为了能够具备通过互联网实现与别人协作开发的能力。对于项目,需要一个公开的源代码托管服务。好在,现在已经有不少可以供我们选择的。尤其是githost,更是一个中文的源代码托管服务提供方。从目前看来,在Githost上落户的项目还很少,貌似是一个新近诞生的服务提供方。如果项目对服务提供的稳定性有比较高的要求的话,还是选择较老的git源代码托管服务比较好吧。
如果是在局域网内工作的小组,要使用Git做源代码管理,那就更简单了,大家安装好自己的Git,并指定一个人负责对Git版本库进行管理就好了。
(一) GitHub简介
GitHub是使用Ruby开发的,具有清爽的界面。GitHub提供免费的源代码库托管,同时也提供付费的托管服务。通过付费私有库托管服务在财务上支持免费部分的持续运营。
GitHub提供了一套独特的代码库管理界面功能,并提供项目Wiki的能力。
GitHub提供了一系列的指南,也可以到这里去看看:http://github.com/guides/home
(二) 在Windows系统上安装Git
到msysgit的老家下载安装程序。http://code.google.com/p/msysgit/
选择下载“** Full installer if you want to use official Git 1.5.6.1 **”对应的Git-1.5.6.1-preview20080701.exe。实际上,总可以选择最新的Git版本,以取得更好的使用效果。
安装的过程很简单,基本上可以使用默认设置。只是在设置路径的时候要注意一下,为了避免与Windows路径导致的意外情况,还是使用“Use Git Bash Only”比较安全。
Msysgit有命令行和图形UI两种使用方式。根据你的喜好选择吧。要说的是,图形UI可能不能完成所有的工作,因此在某些情况下(例如创建SSH Key),命令行还是必不可少的。
Msysgit的Bash命令行对中文的支持不好。所有的中文字符都显示成了“?”。因此,为了避免麻烦,最好避免使用中文的文件名、目录名和用户名等。不知道现阶段Cygwin对中文的支持如何,随后再试试看吧。
(三) 设定GitHub
要使用GitHub首先需要创建SSH Key。SSH将用来加密本机与远端服务器之间的通信。同时也是识别你对代码所做的变更的方法。SSH Key可以使用Git命令行来产生。如果你已经有一个SSH Key了,那么在这里也可以直接使用。
要使用Git创建SSH Key 首先需要打开Git Bash 命令行。
输入命令:
ssh-keygen -C "username@email.com" -t rsa
说明:username@email.com 需要更换成你自己的Email地址
程序将提出一些问题,接受文件默认存放位置,当要求输入pass phrase时,如果本机安全没有问题,也可以不输入。找到当时制定的文件存储位置中id_rsa.pub文件。这就是在GitHub上申请帐户时需要使用的SSH公钥文件。
在github.com的register中选择Free account,在后续的界面中按照要求填入相应的内容即可完成注册。很简单的。
关于Git后续如何使用,还是在另外的文档中说明吧。
三、关于Git的一些联结
1、 建立Git远程服务器:
目前貌似还没有在Windows上建立Git服务器的。Linux在开源上还是强大啊!
l Hosting Git repositories, The Easy (and Secure) Way
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
l Remote Git Repos on Ubuntu: The Right Way
http://blog.drewolson.org/2008/05/remote-git-repos-on-ubuntu-right-way.html
l Installing Git on a server (Ubuntu or Debian)
http://www.urbanpuddle.com/articles/2008/07/11/installing-git-on-a-server-ubuntu-or-debian
2、 基于Git的源代码托管
l 中文的Git源代码托管,基于gitorious构建:http://www.githost.cn/projects
l Gitorious
Gitorious is another free hosting site with a custom web interface, supporting multiple repositories per project, local installations and with open source code:
http://gitorious.org/
l repo.or.cz
repo.or.cz is the oldest hosting site, accommodating many hundreds of projects, with open-sourced infrastructure and aimed at open source software. It provides full push features as well as simple mirroring mode and gitweb interface with various enhancements. :http://repo.or.cz/
l GitHub
GitHub provides both free hosting for smaller projects and paid options for private hosting and large-sized projects. It uses a custom web interface including a wiki hosting and puts emphasis on social networking of project developers:http://github.com/
3、 关于Git的有用的联结:
l Git的老家:http://git.or.cz/
l Git User's Manual (for version 1.5.3 or newer) :
http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.2/user-manual.html
l Git - SVN Crash Course:
http://git.or.cz/course/svn.html
l Everyday GIT With 20 Commands Or So:
http://www.kernel.org/pub/software/scm/git/docs/everyday.html
四、参考文档:
l Getting Started with Git and GitHub on Windows:
http://kylecordes.com/2008/04/30/git-windows-go/
l 中文教程: http://www.bitsun.com/documents/gittutorcn.htm
l 简介: http://linuxtoy.org/archives/git.html
l 英文教程:http://www.kernel.org/pub/software/scm/git/docs/tutorial.html
l GitHub:http://github.com