文章转载自:http://blog.csdn.net/loadsong/article/details/51591631

前几天还都是一个开发者唱独角戏。但是尽管如此也可以看出 Git 带来的便利了,比如代码写错了可以回滚,为了新功能开发可以开新分支等等。但是 git 和 github 更大的威力在于协作。

聊了这么多天的 github,有必要稍微停下来,再想想究竟什么是 github 。没错,前面的使用中也看到了,github 是 git 仓库的托管平台,让我们的项目仓库可以方便的备份同步。但是其实也许比这个还要重要的是,github 是一个大家一起协作做项目的平台,是一种开发者的工作方式,引导一种看着不像流程的一种真正健康轻便的开发流程。

Github 多年来总结出来一套自己的团队协作流程,简单而且强大,叫做 Github
Flow
 ,网站上的各个功能都是围绕着这个流程来开发的。另,中文版的 Github Flow 在这里 。

要了解一个流程,没有什么比跑一个最简单的实际例子更好的方式了,官方给出的Hello
World
就是服务于这个目的,不过这个 Hello World 用的是纯粹的网页来实现整个流程。咱们今天用网页配合 Github For Mac 客户端来完成这个流程。

什么是 Github Flow ?

说白了,就是给一个项目开发新功能要走的几步。整个过程的核心是“拉取请求” 。

第一步,创建新的话题分支。如下图所示

第二步,不断实现功能,做成一个个新版本。

第三步,发起”拉取请求“( Pull Request ),后面简称 PR 吧。

第四步,大家讨论。这是一个代码审核的过程。

最后,把话题分支的内容合并到 master 。

下面跑一个实际例子。

给队友添加写权限

现在我和 @billi66 要合作开发一个新项目。于是我就来创建这个项目,过程在浏览器中使用
Github
中已经介绍过了。下面就继续在 coco 这个项目上做演示。

现在我要把 @billi66 添加进来,让她也具有项目的修改权限了。如何来做呢?把她添加成项目的“协作者”( collaborator ) 就行了。 coco 本身是一个私有仓库 ,但是对于开源项目也是一样可以添加 collaborator 的。

首先到项目页面,点击 Settings 一项,

到项目的 Settings 页面,可以看到如下图所示的 collaborator 选项,输入框中输入 bi 就可以自动补齐出billie66 了

回车选中,然后点 Add collaborator 按钮,这样就完成了。

开话题分支并在上面开发

现在我和 @billie66 都对 coco 项目有写权限,对于非常有把握的代码,可以直接在本地 master 开发然后 sync 到远端 master 分支上面。但是如果是比较重要的功能,还是要发单独开”话题分支“( Topic Branch ),这个是后面发 PR 的前提。

尽管所有的流程操作都可以在浏览器中完成。但是更为常见的情形是我和
@billie 会把代码 clone 到本地开进行新功能的开发,因为这样可以使用自己的编辑器以及测试工具。

现在我要对项目开发一个很大很大的功能,所以就先来开一个分支叫做 describe-project 。名字是越清楚越好的,这样队友比较能一眼看出我在干什么。注意开新分支一定要在刚刚更新过的 master 的基础上开。开好之后把这个分支发布到远端,以后这个分支上每次实现一点小功能就 publish 到远端,这样的好处是队友可以随时看到我的进展。这部分的操作前面客户端使用中都介绍了。

这样我做了两个版本,而且都同步到远端仓库了。所以到 describe-project 分支的历史上可以看到多了下面两个新 commit 。

功能实现了,可以发 PR 了。

发 Pull Request

PR 在整个 Github Flow 流程中占有核心位置。其实 PR 的目的就是讨论,且整个讨论过程是围绕着实打实的代码。

先到仓库页面,找到发 PR 的大绿按钮

下面图中显示的界面中,看1处,注意一下是拿出哪两个分支来进行对比。2处,我要填写一些内容,解释一下我的修改内容。3处,可以上传图片。

同样在这个页面上,滑动到下方还可以看到这次 PR 的具体对比出来的代码内容

点击 Create Pull Request 按钮,这样发 PR 就成功了。

补充一句。实际上,客户端中也可以发
PR
,达成的效果跟网页中发是一样的,这里就不演示了。

讨论审核代码

PR 的讨论过程也算是代码审核。不一定是一个老大审核小弟们的代码,可以是队友之间的互相审核。

@billie66 看到这个 PR 之后,就会发表她的意见了。

看到之后我觉得有道理,代码需要调整,那我现在是不是要撤销这 PR 重新发呢?不用。我只需要继续在 describe-project 分支上改代码然后再同步上来。

上面的图中可以看到,讨论不断继续,会形成一条由评论和代码穿插而成的一条线。最后达成一致,我或者 @billie 其中之一可以点一下上面的大大的 Merge Pull Request ( 融合拉取请求 )的按钮,这样话题分支上的代码就合并到 master 之上了。接下来 describe-project
这个话题分支也就可以删掉了。然后关闭这个 PR 了。

每一个 PR 都是开发历史上的一次小事件,很长时间过去之后,再看看当时的 PR 就可以看到当时为什么要开发这个功能,大家都是什么意见,都写了哪些代码,所以是项目发展的珍贵资料。从这个角度来说,即使一个 PR 没有被 merge 进 master ,那它里面的代码和讨论的内容也会是非常有意义的尝试,也可能在未来会有很大的参考价值。

快速 PR

走一遍 Github Flow 其实方式并不唯一。前面讨论的,在自己的机器上改代码,用客户端作 commit,然后在网页上发 PR 是一种常见的方式。如果我只是改一个文件中的一个小地方,完全可以使用 github 网页功能提供的快速
PR
这种方法。来演示一下。

网页界面中,找到我要修改的文件,点击 edit

然后在下面的界面中,可以直接填写一个 Topic 分支名,创建这个分支,并 commit 到这个分支上发 PR 了

说实话要只是一个小改动,即使是老手,你让我切换到编辑器和客户端,再跑一遍整个的这个发 PR 的流程,我也会觉得挺麻烦挺分心的。快速 PR 方法真的是非常方便。

总结

其实,每一个打开的 PR 都很类似于后面我们要讲的 Issue ( 事务卡片 ),比如二者都可以用 Markdown 格式来写评论。这些技巧会在 Issue 相关的那一部分来介绍。

[GitHub]第五讲:团队合作流程的更多相关文章

  1. 使用GitHub进行团队合作

    原文: Team Collaboration With GitHub GitHub已经成为的一切开放源码软件的基石.开发人员喜欢它,基于它进行协作,并不断通过它开发令人惊叹的项目.除了​​代码托管,G ...

  2. GitHub 系列之「团队合作利器 Branch」

    Git 相比于 SVN 最强大的一个地方就在于「分支」,Git 的分支操作简直不要太方便,而实际项目开发中团队合作最依赖的莫过于分支了,关于分支前面的系列也提到过,但是本篇会详细讲述什么是分支.分支的 ...

  3. 从0开始学习 GITHUB 系列之「团队合作利器 BRANCH」【转】

    本文转载自:http://stormzhang.com/github/2016/07/09/learn-from-github-from-zero6/ 版权声明:本文为 stormzhang 原创文章 ...

  4. 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」

    Git 相比于 SVN 最强大的一个地方就在于「分支」,Git 的分支操作简直不要太方便,而实际项目开发中团队合作最依赖的莫过于分支了,关于分支前面的系列也提到过,但是本篇会详细讲述什么是分支.分支的 ...

  5. GitHub团队协作流程

    说来惭愧,这么长时间,第一次参与修改开源项目,所以整理了一份GitHub团队协作流程,作为备忘,文章大部分内容参考https://www.cnblogs.com/schaepher/p/4933873 ...

  6. 转:GitHub团队项目合作流程

    转自:https://www.cnblogs.com/schaepher/p/4933873.html GitHub团队项目合作流程   已在另一篇博客中写出关于以下问题的解决,点此进入: 同步团队项 ...

  7. 《编写高质量代码-Web前端开发修改之道》笔记--第二章 团队合作

    本章内容: 揭秘前端开发工程师 欲精一行,必先通十行 增加代码的可读性--注释 提高重用性--公共组件和私有组件的维护 冗余和精简的矛盾--选择集中还是选择分散 磨刀不误砍柴工--前期的构思很重要 制 ...

  8. 团队合作one

    一.项目介绍 为生活在长大的学生提供方快捷的生活服务,通过帖子发现自己志同道合的朋友,记录自己在长大点滴.本项目的意义在于锻炼团队的scrum能力,加强团队合作能力.确定本项目采用的技术方向:本项目整 ...

  9. 团队合作学习scrum

    查找资料学习scrum心得: 什么是scrum : scrum是一种轻量级软件开发方法,即一种做事的方法.scrum原本是指橄榄球运动的一个专业术语,原意为团队通力合作,在场地内传球.这个过程需要认真 ...

随机推荐

  1. 网易互联网&网易游戏产品经理面试经验

    网易是分网易游戏和网易互联网的,本人都参加了校园招聘面试,最后均拿到了产品经理的offer. 网易是分网易游戏和网易互联网的,先说网易互联网吧,当时是去杭州总部进行面试,我觉得这是我面的最难的面试了. ...

  2. Cisco banner 登陆消息提示设置命令详解

    从法律角度来看,登陆消息非常重要.当入侵者进入网络而没有受到适当的警告时,他们有可能赢得官司.在放置登陆消息之前应让律师检查下,永远不要使用"欢迎"等问候语,以免被误解为邀请大家使 ...

  3. Android SDK下载安装及配置教程

    2017年12月07日 13:33:32 4942 转载自:http://blog.csdn.net/dr_neo/article/details/49870587 Android开发环境搭建可以分为 ...

  4. 正确在遍历中删除List元素

    最近在写代码的时候遇到了遍历时删除List元素的问题,在此写一篇博客记录一下. 一般而言,遍历List元素有以下三种方式: 使用普通for循环遍历 使用增强型for循环遍历 使用iterator遍历 ...

  5. WPF ListBox/ListView/DataGrid 虚拟化时的滚动方式

    ListBox的滚动方式 分为像素滚动和列表项滚动 通过ListBox的附加属性ScrollViewer.CanContentScroll来设置.因此ListBox的默认模板中,含有ScrollVie ...

  6. .NET中的各种池

    在.NET中,常用到的池有四个:字符串拘留池.线程池 .应用程序池.数据库连接池. 字符串拘留池 在.NET中字符串是不可变对象,修改字符串变量的值会产生新的对象.为降低性能消耗及减小程序集大小,.N ...

  7. AnyConnect使用说明(电脑版Windows)

    一.下载客户端 Anyconnect支持Windows.Mac电脑. 二.安装 1.双击打开下载的文件,点“Next”开始安装. 2.选择“I accept …”,再点下一步. 3.点“Install ...

  8. 【kmp】 剪花布条 HDU - 2087

    [题意概述] [解题思路] 从左往右找,看有几个匹配的字符串,但要注意例如 aaaaaa  aa的输出是3 而不是5,可以这样理解:画布需要减去,一旦减去也就没有了的 [AC] #include< ...

  9. Docker 自定义网桥

    除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器. 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥. 如果服务已经运行, ...

  10. 基于Java配置Spring加Hibernate和再加SpringData时的差别

    先在类路径application.properties jdbc.driverClassName = org.postgresql.Driver jdbc.url = jdbc:postgresql: ...