`
qbaty
  • 浏览: 96974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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=xxx
git 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"
这个时候,应该能看到下面的结果
$ ls
config  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来测试是否可以通信
如果你是第一次链接得到的结果如果是
引用
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
ERROR: Hi tekkub! You've successfully authenticated, but GitHub does not provide shell access
Connection to github.com closed.

则证明你已经联通了github

第三步 开始工作 简单的双向操作
现在我们可以开始来说说如何从github上获取代码了,当你在浏览github的时候,你发现你对jquery的代码很有兴趣,然后你又发现了他的一些bug这个时候你想要修改怎么办?
让我们从第一种模式开始说起吧
The Fork + Pull Model 分支推送模式
你可以在浏览代码库的时候发现github右上角右个小按钮fork,这是分支的意思。当你按下之后你会发现,在你自己的主页会产生一个和这个同名的库,这个库就是分支出来的库。
然后你可以看到,github 给 你分支的库生成了三个地址分别是ssh http 和 read only
用前两个都有编辑权限,这个时候打开你的terminal
//把服务器分支好的代码库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,因为开源的力量真的很强大。

分享到:
评论
1 楼 peacherdiy 2012-10-27  
好文,3Q楼主分享

相关推荐

    GitHub简介.docx

    分支(Branch)是一种在不同版本的存储库上工作的方式。默认情况下,存储库有一个名为 master 的分支,该分支被视为权威分支。使用分支可以进行实验和修改,然后将其提交到 master。创建一个新分支可以将 master 在...

    gitee+github desk团队工作流程.docx

    这里可以创建两种类型的仓库:代码仓库和资源仓库。 - **GitHub Desktop**: 如果还没有安装GitHub Desktop,可以从官方网站下载并安装它。 **2. 仓库克隆** - **克隆仓库**: 使用GitHub Desktop克隆之前在Gitee...

    GitHub Desktop for Mac

    为了保护你的代码安全,GitHub Desktop支持HTTPS和SSH两种认证方式。SSH公钥的管理也集成在应用内,方便用户添加和管理多个GitHub账户。 **10. 社区支持** 作为GitHub的一部分,GitHub Desktop拥有庞大的开发者社区...

    Github for Window 离线安装包

    通过这种方式,即使在网络条件不佳或者没有网络的情况下,开发者也可以轻松地在Windows系统上安装和使用GitHub,继续他们的代码管理和协作工作。离线安装包为用户提供了便利,特别是对于那些在远程或网络不稳定地区...

    github介绍

    现代版本控制系统通过自动化管理解决了这些问题,主要有两种架构模型: 1. **中央式系统**:所有版本控制操作都集中在一台服务器上执行。这种方式通常采用“锁定”机制来防止多个用户同时编辑同一个文件。经典例子...

    github安装包(在线与离线)

    本资源包提供了在线和离线两种方式安装GitHub,对于网络条件不稳定或者需要在没有互联网连接的环境下安装的用户来说非常实用。 首先,我们来详细了解一下在线安装GitHub的过程。在线安装通常是最简单的方法,适合...

    Java-Interview-超全集合github上评分最高的jiva面试题

    - **内存泄漏与内存溢出**:如何检测和避免这两种问题。 5. **设计模式** - **常见设计模式**:单例、工厂、观察者、装饰器、代理、适配器等23种设计模式的应用场景和实现方式。 6. **Git基础** - **版本控制**...

    github创建工程

    根据题目中的描述与部分代码内容,我们了解到可以通过两种方式来创建GitHub仓库: 1. **通过GitHub网页界面创建** - 登录GitHub账户。 - 在主页右上角点击“+”号,选择“New repository”。 - 输入仓库名称,...

    开源项目-github-hub.zip

    它通过将Git命令与GitHub API相结合,提供了一种无缝的工作流程,极大地提高了开发者在GitHub上的工作效率。 【`hub` 2.2.1 版本更新】 GitHub CLI `hub` 2.2.1 的发布带来了新的特性和改进,旨在进一步优化用户...

    Git与Github.docx

    Git 与 Github 是两种在软件开发中至关重要的工具,它们为开发者提供了版本控制和协作的能力。Git 是一个分布式版本控制系统,而 Github 是一个基于云的平台,它为 Git 提供了托管服务,允许用户存储、共享和管理...

    Git&GitHub相关学习.zip

    Git和GitHub是现代软件...总之,Git和GitHub是软件开发中极其重要的工具,它们提供了一种有效管理和协作代码的方式。通过系统学习,结合思维导图的辅助,你可以更好地掌握这两个工具,并在实践中不断提高自己的技能。

    了解 GitHub 上的促销即服务.pdf

    这两种操作都是衡量项目受欢迎程度的重要指标,也是促销者用来提升项目可见度的主要手段。 **2. 篡改历史提交记录**:通过一定的技术手段,促销者可以修改仓库的历史提交记录,使之看起来像是在过去某个时间点完成...

    git、github的操作

    首先,需要在本地计算机上安装Git,以开始版本控制工作。可以从Git的官方网站下载适合不同操作系统的安装包。安装过程中,会涉及到一些基本的配置选项,如设置用户名和邮箱地址,这两个信息将与Git提交(commit)...

    github上去除马赛克的项目

    在GitHub上,存在一个旨在尝试去除马赛克的项目。虽然这个项目不能保证完全去除所有类型的马赛克,但它提供了一种方法来处理特定情况下的马赛克图像。这种方法依赖于对比处理,即需要将待处理的马赛克图像与一组参考...

    Github:Android自定义ToggleButton(模仿ios风格)

    在Android SDK中,`ToggleButton`继承自`CompoundButton`,它默认提供了两种状态(ON/OFF)的图形表示。开发者可以使用XML属性如`android:textOn`和`android:textOff`来设置选中和未选中的文字显示,`android:...

    Python-利用Github实现自己的图床

    在IT行业中,图床通常指的是一个在线存储图片的服务器,用于托管Markdown或其他文档中的图片链接,...总的来说,利用Python和GitHub实现个人图床,不仅可以提升工作效率,也是对Python和GitHub API应用能力的一种锻炼。

    GitHub快速入门.docx

    4. **打开与合并拉取请求**:拉取请求是 GitHub 上协作的核心方式。当你在分支上完成工作后,可以创建一个拉取请求,请求将分支上的更改合并到主分支。其他团队成员可以审查这些更改,提供反馈,然后批准合并。 在...

    github上下载的最新mybatis压缩包

    2. **映射灵活性**:MyBatis支持XML和注解两种方式来定义映射规则,可以将数据库表字段与Java对象属性进行映射。 3. **简单接口操作**:使用MyBatis时,开发者只需要定义接口方法,框架会自动生成对应的SQL执行并...

Global site tag (gtag.js) - Google Analytics