首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

github 上惯用的两种工作模式

2012-07-01 
github 上常用的两种工作模式最近和army8735一起维护他的代码,由于最近代码管理github吵的很热,所以也正好

github 上常用的两种工作模式
最近和army8735一起维护他的代码,由于最近代码管理github吵的很热,所以也正好把代码放到git hub上管理,顺便了解下github的工作模式,写这篇文章就是来总结用github来管理代码的一些方式。
文章开始前我觉得有必要稍微介绍下GIT.
Git --- The stupid content tracker, 傻瓜内容跟踪器。那么怎么理解呢?git首先是一个版本控制工具,这点和常用CVS, Subversion是一样的,而不同的是,他采用分布式版本控制库的方式管理。Git的速度非常快,可以很轻易创建分支,并且非常适合用于大项目,它有着非常出色的代码合并追踪能力,再同时它有很多小工具帮它管理版本库。在此本文不试图去深入讨论理解git的工作原理,只打算介绍一下git的相对优点,以及我们可以用git做什么。当今的jquery,淘宝的kissy,白度的Tangram都把自己的代码托管到github上,这里像一个开源基地,谁都可以给任何自己想要参与的项目贡献代码,这个归功于github上提供的两种协作模式(Collaborative Development Models):1、The Fork + Pull Model  (分支推送模式)2、The Shared Repository Model(共享仓库模式)第一种模式在作为陌生人贡献代码上十分有用,后面会详细介绍。

第一步 环境
(如果你已经安装好了环境,并且在github上设置好了ssh密钥,你可以跳过这些内容)
目前git已经都具备了mac linux(不用说) win的安装包
在开始用git工作前,先得确保机器上已经有git的环境
win 下的git安装http://help.github.com/win-git-installation/
mac 下的git安装http://help.github.com/mac-git-installation/
linux 下的git安装http://help.github.com/linux-git-installation/

在安装好了git环境之后你需要做些简单的配置
打开 git 命令行,进到你要放置你代码的目录
输入 git init //git 初始化

git config --global user.name=xxxgit config --global user.email=xxx

mac下 等号替换成空格
做上面那些是设置用户名和email,因为git不允许匿名提交
这个时候git本地已经可以工作了,但是如果要和服务器通信,还有一步要做就是

第二步 远程连接
Generating SSH keys 生成ssh密钥
希望这个时候你已经有了一个github的帐号,因为key是要绑定的,没有就去申请一个吧
密钥应该是在根目录的.ssh下,所以
$ cd ~/.ssh//这个emai替换成你自己的email$ ssh-keygen -t rsa -C "xxx@gmail.com"这个时候,应该能看到下面的结果$ lsconfig  id_rsa  id_rsa.pub  known_hosts


然后登录github
github=》account setting=》ssh public keys=》add public key
在content里填入rsa.pub的内容,注意别多空格,保存就ok了
最后通过
$ ssh git@github.com来测试是否可以通信
如果你是第一次链接得到的结果如果是
//把服务器分支好的代码库down到本地$ git clone https://qbaty@github.com/qbaty/jquery.git
这个时候你就可以在本地修改了,当然你也可以直接在github上修改。然后你改完了某个文件,假如是build.xml这个文件
//让git版本库追踪到build.xml这个文件$ git add build.xml//提交到本地版本库 引号里是注释$ git commit -m "add something"//这个时候已经提交到本地git版本库了,需要传到github需要推送下$ git push origin master

这个环节可能会要你输入你产生ssh密钥时候设置的密码,如果没有设置则为空
当terminal显示完成的时候,刷新你在github上的代码库,你已经可以发现你的修改已经被更新到服务器了

回到你的代码库首页,会发现还是右上角有个pull request按钮,如果你想要把你的代码的改动更新到jquery,按下那个按钮会跳转到sent pull request页面,有一个表单,是用来说明你的提交的内容主要功能。填完按下sent pull request,代码库管理者就能收到这个请求,在审核过你的代码后,把这部分合并到主代码上。

假设你是代码管理者,别人send pull request 给你的时候,你会在你的代码库首页接受到这个请求,然后你决定你要合并别人的改动
这个时候你需要merge pull request
通常有两种比较流行的方式:
Fetch and Merge
//选种当前 master 为当前分支$ git checkout master//让git追踪到远程的要合并的代码库$ git remote add xxx git://github.com/xxx/jquery.git//合并分支$ git fetch xxx$ git merge xxx/jquery.js//推送回给自己的代码库$ git push origin master


Patch and Apply
每一个pull request都会产生一个patch url,你可以用git am命令来应用修改
$ git checkout master//应用这个分支的改动$ curl http://github.com/github/jobs/pull/25.patch | git am$ git push origin master

这就是一个简单的fork+pull request model下分支以及合并过程。

关于github的分支冲突合并,了解的还不够深入,目前只知道手动合并。
而其强大之处就是你可以通过fork quene来查看所有的分支,并且可以随意选择和任意一个分支合并。这一块应该还有很多可以研究的,在此我只是抛砖引玉,如有错漏还请见谅,希望越来越多的人来尝试github,因为开源的力量真的很强大。

热点排行