Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,做者把他描述为一个“傻瓜式的版本管理系统”,用做Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤 其是在Ruby社区中。目前,包括Rubinius和Merb在内的不少知名项目都使用了Git。Git一样能够被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。使用GIT系统,不须要像SVN那样搭建一台SVN服务器来存放代码库。
1、为何选择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
一、更方便的 Merge
分布式管理必然致使大量的 Branch 和 Merge 操做。所以分布式版本控制系统都特别注意这方面。在传统的 CVS 里面制做 Branch 和 Merge 简直就是噩梦,Subversion 做为一个用于替代 CVS 的系统,专门改进了 Branch 操做。然而彷佛人们没有注意到,Branch 是轻松了,但是 Merge 呢?若是不能很方便地 Merge 回来,作 Branch 仍然是噩梦。事实上,我就经历过在开发团队里面因为队友操做不对而在 Merge 的时候把个人许多代码都覆盖掉了。当时正是使用的 subversion 。虽然源代码仍然在历史里面,可是要去一个一个地找出被覆盖掉的文件并恢复过来确实是一件很难忘的事情。
二、更方便的管理
传统的版本控制系统使用中央仓库,一些仓库相关的管理就只能在仓库上进行。赋予开发团队每个人中央仓库的管理权限是很是很差的。可是有时候确实会比较不方便的地方。
三、更健壮的系统
分布式系统通常状况下老是比单服务端的系统要健壮,由于但服务端一旦服务器挂掉了整个系统就不能运行了。然而分布式系统一般不会由于一两个节点而受到影响。
四、对网络的依赖性更低
虽然如今网络很是普及,可是并非随时随地都有高速网络,甚至有时候根本没有网络能够访问。低速的网络会让人心情烦躁,有时候就呆呆地盯着屏幕上 的 commit 进度,什么事情也干不了。而没有网络链接更是致命的:你没法 commit !这表示你进行任何改动之前都必须当心翼翼,不然你可能再也找不会你曾经写的一些代码了。
五、更少的“仓库污染”
有时候你要作一个模块,它不是太大,因此没有必要为它新建一个 branch ,可是它又不是那么小,不可能一次提交就作好。因而便会提交一些不完整的代码到仓库,有时候会致使整个程序没法运行,严重影响团队里其余人的开发。大多数 人在这种状况下的解决办法都是写完以后再提交。可是做为习惯了版本控制的人来讲,进行不计后果的大幅修改是常常的事情,到后来忽然发现本身先前的代码没有 提交,就后悔莫及了。若是是分布式系统的话就不会存在这样的问题,由于本地仓库的修改不会影响到别人的仓库。当你完成并测试之后,就能够在邮件列表里面 说:我已经把这个模块作好了。而后感兴趣的人就能够从你这里 pull 你的成果了。
虽然网上各类对Git的誉美之词决不止于此,可是在Git的主站上,仍是尽量客观的对Git和Subversion进行了一番比 较。(GitSvnComparsion :http://git.or.cz/gitwiki/GitSvnComparsion)。另外,Subversion目前经过SVK也已经提供了必定 程度上的源代码库分布式的管理能力。可以实现源代码的离线提交等功能。
2、在Windows上的使用Git
不得不说,Git是为Linux而生的。(废话,Git的最初建立人就是Linux的创始人啊)。在Linux环境下,要使用Git,与任何 Linux中的命令行工具没有什么区别。甚至在击键数上还有明显的优点。在Windows上要使用Git在目前看来只有两种方法:使用Cygwin(一个 在Windows上运行的Linux环境)或者使用
msysgit(http://co
de.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://co
de.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 On
ly”比较安全。
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后续如何使用,仍是在另外的文档中说明吧。 3、关于Git的一些联结 一、 创建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 二、 基于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 co de: 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/ 三、 关于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 4、参考文档: 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