原文:http://our2848884.blog.163.com/blog/static/146854834201152325233854/
最近感觉自己电脑上的代码太乱了,东一块、西一块……于是决定使用正规的源代码管理软件来管理自己以后写的代码。以前做小项目的时候用过 TortoiseSVN,感觉不错,但是速度上有点慢,于是决定尝试一下新东西——Git。通过网络发现Git很火,看看下面的文字你就会知道Git有多 火。
Git 是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括 Rubinius和Merb在内的很多知名项目都使用了Git。Git同样可以被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。
目前大部分的版本控制都需要一個服务器端,commit时提交到服务器端。git虽然是分布式的管理工具,但它也可以使用集中管理的方式。举例来 说,billy创建了一个新项目,tom觉得这个项目比较有意思,他想玩玩看,他可以把整个repo(reoisitories)都clone到本地,并 且在他clone下来的项目中自己有一个repo。tom可以*的对这个repo做各种提交修改,直到他满意为止。这时tom可以告诉billy,他改 了一些什么,若billy觉得不错,可以从tom那边fetch并merge到本地。
如前所述,作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合 并。正因为如此,所以有了Github这个网站,github是基于ruby的并揉合多种语言进行开发的,上面的ruby项目也非常活跃。在github 中,每个人都可以有多个repo,这些repo都是与用户绑定在一起的。user之间可以互相clone repo、fork repo、watch repo或是 follow其他user,就好像twitter或是plurk等社交网站一样。
不过若使用免费的github则所有的repo都要是public且有300M容量的限制。若希望有private的repo,则需要跟付费才可。github另外还有剪贴簿的功能,可将代码贴到其中并*的发展各种branch。
GitHub 可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code 这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按 钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。已经有人将GitHub称为代码玩家的Facebook。
看了上面的简介,感觉不错吧。那我们现在开始行动吧。
1 下载并安装相关软件
这里主要涉及的软件包括msysgit和TortoiseGit。
msysgit的下载地址:http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe
TortoiseGit的下载地址:http://download.tortoisegit.org/tgit/
在安装 TortoiseGit 之前,你的 Windows PC 上必须先安装 msysgit。因为此程序提供了 Git 核心。而且安装顺序是:先安装 msysgit,然后安装 TortoiseGit。 如果你弄反了,也没有关系,可以进入 TortoiseGit 的设置界面(右键菜单上 TortoiseGit -> Settings -> General -> MSysGit -> Path),手动指定 Git 核心文件的位置(例如 c:\Program Files\Git\bin)。发现没有,当你进入设置界面的时候,已经配置好了,不得不说现在的软件做得可真周到。
2 在github.com上建立自己的帐号
前文说了,github就是程序员的facebook,所以我们应该有自己的帐号。帐号分两种,免费帐号和付费帐号。使用免费的github,所有的 repo都要是public且有300M容量的限制;若希望有private的repo,则需要付费才可。本着*交流的态度,还是申请一个免费的帐号 吧。这个流程很容易,我就不多说了。
注册后,github会为大家提供几个教程,帮助大家快速学习掌握github的使用方法。地址如下:
Set Up Git教程:http://help.github.com/win-set-up-git/
Create a Repo教程:http://help.github.com/create-a-repo/
需要指出的是这些教程使用的是msysgit提供的git bash,如果大家对命令行很感冒,那么那些教程基本上就够大家参考了,无需再浏览本文;否则恳请各位继续欣赏下文。
3 环境配置
本着学习的态度,我按照上述教程走了一下,发现问题:github ssh: connect to host github.com port 22
本人愚钝,没有解决该问题……于是还是回到开始的想法,使用TortoiseGit管理自己的Github项目。
3.1 在TortoiseGit配置MSysGit
在开始菜单中找到TortoiseGit的Settings一项,如图1所示。
图 1 TortoiseGit中Settings的位置
由于我是64位的电脑,所以会显示Settings (64 bit)。左键点击后,进入TortoiseGit的设置界面。可以清楚的看到,MSysGit已经配置好了。如果Git.exe的位置为空,请大家自己手动设置好。
图 2 TortoiseGit的设置界面
3.2 建立测试项目HelloGit
在想放置项目的位置新建一个文件夹,名称为HelloGit,右键单击该文件夹,选择"Git Create repository here…",也就是创建本地的代码库。此时会弹出对话框,选择"OK"。(PS:不用搭理哪个复选框)随后会提示成功创建了一个空的代码仓库。
3.3 向HelloGit添加文件并更新项目到本地版本库中
新建一个README文件,随意填写一些信息。然后邮件单击README,选择"Git Add…",就是将README文件添加到本地HelloGit项目中。
单击"OK"后,显示如下对话框。
单击"commit",将更新提交到本地版本库中。
别忘了在"Message"中填写此次提交所完成的任务,便于以后查看提交信息,对项目的进度有所掌握。单击"OK",继续。
3.4 建立沟通远程版本库与TortoiseGit的联系
这里提到的沟通桥梁就是通信中使用的密钥。TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。也就是说使用ssh-keygen -C "username@email.com" -t rsa产生的密钥在TortoiseGit中不能用。而基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。
运行TortoiseGit开始菜单中的puttygen程序,点击“Generate”按钮,鼠标在上图的空白地方来回移动直到进度条完毕,就会自动生一个随机的key。
登录Github官网,点击右上角的"Account Settings",选择SSH Public Keys->Add another public key,将上面生成的Key粘贴进来,选择"Add Key"。公钥添加完毕。然后点击上面对话框中的"Save private key",将私钥保存在本地,文件后缀是ppk。
运行TortoiseGit开始菜单中的Pageant程序,程序启动后将自动停靠在任务栏中,图标显示为,双击该图标,弹出key管理列表。点击"Add Key",选择刚才保存的ppk文件,这样私钥就添加到key管理列表中了。
3.5 更新项目到远程版本库中
这是我们的最后一步啦!但是前提是我们得在TortoiseGit中配置好"Remote"。右键单击HelloGit项目,选择TortoiseGit->Settings,弹出如下对话框。
我们需要做的工作就是配置Git的Remote项。
Remote就是给该项目起个名称,我们就是HelloGit;
Url就 是Github上对应的远程版本库的网络地址。各位有没有认真看前面给的教程呀,建立一个Repo应该没有问题吧。在本地key管理列表添加好自己的私钥 了吧,在github上的相应项目中添加好自己的公钥了吧,那我们可以继续了,不然还得返回到3.4。在网站上进入你的项目中,会看到如下信息:
前面我已经讲了,在我的电脑上使用SSH,无法连接到github,所以此处我选择的是HTTP的方式。git@github.com:username/reponame.git就是我们需要的Url。(PS:username和reponame应该是跟你的设置对应的,在使用中你可别真的原封不动地使用git@github.com:username/reponame.git,这可是连不上服务器的)
Putty处需要填的信息就是我们在本地保存的私钥文件的路径。
填好这三项后,点击"Add New",就会在左边的列表中显示我们添加好的Remote信息。好了,我们可以进行最后一项工作了。右键单击项目HelloGit文件夹,选择 TortoiseGit->Push,弹出对话框,选择刚才添加的Remote信息,单击"OK",成功推送!
好了,已经很晚了,祝各位晚安!如有问题,欢迎批评指正!