文章目录

  • 1 了解GitHub flow
    • 1.1 创建分支(Create a branch)
    • 1.2 添加提交 (Add commits)
    • 1.3 提出请求 (Open a Pull Request)
    • 1.4 讨论和审核你的代码 (Discuss and review your code)
    • 1.5 部署 (Deploy)
    • 1.6 合并(Merge)
  • 2 团队协作开发
    • 2.1 新建项目(仓库)
    • 2.2 创建分支
    • 2.3 项目成员在新分支上提交代码
    • 2.4 发送请求
    • 2.5 讨论与审核代码
    • 2.6 合并分支
  • 3 开源项目协作开发
    • 3.1 新建项目(仓库)
    • 3.2 Fork
    • 3.3 创建分支
    • 3.4 提交代码
    • 3.5 发送请求
    • 3.6 讨论与审核代码
    • 3.7 合并分支
  • 4 总结
  • 参考资料

注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/106056200

以前用GitHub只知道搜索代码然后下载看是否使用,也不知道GitHub其他的功能。最近了解了GitHub相关功能,觉得GitHub太厉害了,微软75亿美元收购GitHub真的太值了。

Github可以协作开发项目,官方文档给出了操作流程: Understanding the GitHub flow

下面将简单介绍文件内容,然后通过两个例子来模拟Github协作开发项目,方便后期复习查阅。

1 了解GitHub flow

1.1 创建分支(Create a branch)

当你在进行项目开发时,在任何给定的时间都会有许多不同的想法,其中一些可能已经完成,而另一些则没有完成。分支可帮助你管理你的项目。
当你在项目中创建分支时,你正在创建一个可以尝试新想法的环境。你在分支上所做的操作不会影响主分支内容,因此你可以自由地进行试验和提交更改,审核后进行合并为止。

ProTip
分支是Git中的核心概念,整个GitHub流程都以此为基础。只有一条规则:master分支中的任何内容始终都是可部署的。
因此,在处理功能或修订时,要在主分支之外创建新分支非常重要。 你创建的分支名称应具有描述性(例如,refactor-authentication, user-content-cache-key, make-retina-avatars),这样方面其他人可以看到正在处理的内容。

1.2 添加提交 (Add commits)

创建分支后,就可以开始进行更改了。无论何时添加,编辑或删除文件,都在进行提交,并将其添加到分支中。添加提交的过程可以跟踪您在功能分支上工作的进度。
提交还会保留历史记录,其他人可以遵循该历史记录来了解您的工作以及原因。每个提交都有一个关联的提交消息,该消息是说明为什么进行特定更改的说明。此外,每次提交都被视为一个单独的更改单元。如果发现错误,则可以反复进行更改。

ProTip
提交消息非常重要,尤其是因为Git会跟踪您的更改,然后将它们显示为提交后将其显示在服务器上。 通过编写清晰的提交消息,您可以使其他人更容易跟进并提供反馈。

1.3 提出请求 (Open a Pull Request)

自己在分支上提交代码后,觉得还不错可以发送请求,送给对方审核,对方审核通过则可以进行合并。

1.4 讨论和审核你的代码 (Discuss and review your code)

管理者打开“提出请求”后,将会对你的代码进行审核,如果有问题可以回复对方修改,直到满意为止。

ProTip
提出请求是用Markdown编辑器进行编辑的,编辑的内容不局限于文本,可以是图片,代码等内容。

1.5 部署 (Deploy)

使用GitHub,你可以从分支进行部署,即正式合并之前进行最终测试。
如果管理者觉得可以就进行合并。

1.6 合并(Merge)

现在您的更改已在生产环境中得到验证,可以将代码进行合并带master分支中。
合并后,提出请求会保留代码历史更改的记录。 因为它们是可搜索的,所以它们使任何人都可以及时返回以了解做出决定的原因和方式。

下面针对上面的原理通过简单的例子进行实践。
分为两种情况:
第一种是团队之间互相认识,共同开发项目。这样可以建立私人项目,然后邀请项目成员共同开发,这样其他人将看不到团队的项目。

第二种是开源的项目,全网都可以看到,大家都可以对你的项目提出建议和修改,达到共同开发的目的。

2 团队协作开发

例如:团队成员有:luohuayouyi66 和 xiongyiming 等人。项目需要团队成员共同开发,项目负责人为luohuayouyi66。那么luohuayouyi66需要在GitHub上新建仓库然后邀请团队成员开发项目。

2.1 新建项目(仓库)

新项目创建好后,需要创建分支,分配给项目成员。

Settings ——> Manage access ——>Invite a collaborator

收到邮件,接受邀请.

这样团队成员xiongyiming 既可以看到这个私人项目 test_teamwork

2.2 创建分支

下面还需要创建一个分支add_hello_world ,分配给项目成员xiongyiming 进行操作。

这样,就出现了新的分支 add_hello_world

2.3 项目成员在新分支上提交代码

私人项目地址: https://github.com/luohuayouyi666/test_teamwork

此时团队成员完成操作。

2.4 发送请求

团队成员xiongyiming完成了自己的任务,希望负责人检查自己的代码并合并分支,来表示自己的操作合格。此时需要发送请求。

2.5 讨论与审核代码

此时,需要等待项目负责人的审核,若果没问题就可以直接合并。自己合并和项目负责人合并都可以。
下面是项目负责人luohuayouyi666看到团队成员xiongyiming发送的请求。

此时发现有拼写错误,并不能合并,要求团队成员重新修改。

此时,团队成员xiongyiming账户上出现消息。

需要重新修改代码

代码改好了之后,不需要再重新发送请求了,直接在消息后面回复即可。

此时,项目负责人账户就会看到团队成员xiongyiming的修改内容并进行审核。

如果觉得没问题就可以选择合并分支

2.6 合并分支

此时,master 分支上就会出现新增的代码文件,这就是合并分支的效果。

然后,建立的分支也可以直接删除。

此时,add_hello_world 分支被删除后,项目只有一个 master 分支的,这样就完成了一个简单团队协作开发项目的操作了。

3 开源项目协作开发

开源项目协作开发就是自己的项目公开放在GitHub上,陌生人看到你的项目就可以Fork你的项目,然后更改内容,此时自己的项目(原作者的项目)不会发生变化。如果陌生人觉得更改的内容可以放进原作者的仓库中,就可以发送请求,原作者可以审核并判断是否可以合并。
开源项目协作开发和团队协作开发的区别在于,前者是和陌生人共同开发,后者是团队之间认识的人协作开发。在开发的过程中,团队之间协作开发可以邀请团队成员,而墨人生需要Fork项目之后才能进行更改,其他的操作二者之间原理相似:
创建分支——>提交代码——>发送请求——>讨论与审核——>合并分支

下面举个简单的例子来说明开源项目协作开发:
假设用户luohuayouyi666仓库中公开了一个项目: test_develop
用户xiongyiming在网上看到该项目觉得挺有意思并觉得还可以在升级,就Fork该项目并修改代码,此时希望原作者luohuayouyi666可以看到自己更改的代码并希望可以合并,就向作者发送请求。
下面具体来进行操作。

3.1 新建项目(仓库)

用户luohuayouyi666创建项目(仓库):test_develop

新增项目文件 hello_world.cpp

3.2 Fork

用户xiongyiming发现用户luohuayouyi666创建项目(仓库):test_develop ,觉得该项目挺好,可以再升级开发,于是需要Frok该项目。

此时,Fork该项目成功,这样可以对该项目随意修改,不会影响原作者的项目内容。

3.3 创建分支

用户xiongyiming发现该项目程序代码出现拼写错误,并且向增加一个代码文件,则可以创建分支直接修改。对于错误代码文件直接修改,选择创建分支进行增加其他代码,。

第一种类型: 直接修改 hello_world.cpp 文件中的错误并发送请求。

修改好了项目原作者发送请求。

发送请求成功后,原作者账户luohuayouyi666看到请求。

此时原作者可以查看修改了哪些内容,并可以向该用户讨论。

觉得没问题的话,就可以合并该请求。

接下来就合并成功了,自己的开源项目得到进一步的完善。

查看提交记录,可以看到用户的修改以及合并的记录。

第二种类型: 用户xiongyiming在Fork的项目上创建分支 add_test_sum,并添加自己的代码 test_sum.cpp文件

此时,分支 add_test_sum 创建成功。下面将在分支下提交自己的代码。

3.4 提交代码

代码提交成功,如下图所示,该分支下面出现新增加的 test_sum.cpp 文件

3.5 发送请求

代码提交成功后,希望原作者可以合并,需要提交请求。

发送请求成功如下图所示,下面就需要原作者进行审核。

3.6 讨论与审核代码

原作者luohuayouyi666账户可以看到用户xiongyiming发送请求,可以进行查看并审核。

3.7 合并分支

如果觉得代码没有问题就可以合并分支,将分支 add_test_sum 合并到 master 分支上。

合并成功后,查看该项目下新增了一个 test_sum.cpp 文件,这样开源项目又得到了进一步完善。

用户xiongyiming可以删除原来的分支 add_test_sum,若想再进一步完善该项目,可以重新Fork该项目,因为有时候原项目有其他用户进行开发,为了方便自己知道是否和其他用户修改的内容发生冲突,可以重新Fork该项目,从而更了解别人开源项目的进展。

4 总结

GitHub协作开发项目可以分为团队协作开发和开源项目协作开发,前者项目成员之间互相认识,后者成员之间可能不认识。其实二者在操作时本质上的区别并不大。协作的主要几个步骤为:
创建分支——>提交代码——>发送请求——>讨论与审核——>合并分支

关于GitHub其他使用可以参见:

[1] Github初步使用
[2] GitHub下载加速


参考资料

[1] Understanding the GitHub flow
[2] 版本控制入门 – 搬进 Github

GitHub协作开发项目相关推荐

  1. github多人协作开发项目教程,2021新版。

    文章目录 github多人协作开发项目教程 文章目录 文章目录 一. 必要理论知识 二. 进行实操 1. 管理者方面 2. 成员方面 三. 总结 一. 必要理论知识 github合作开发,在实操之前, ...

  2. idea整合gitte团队协作开发项目

    目录 1.相同步骤 1.1下载gitte 1.2.安装gitte 1.3注册一个gitte账号 2.不同步骤 2.1项目发起者 2.1.1新建远程仓库 2.1.2新建项目文件 2.1.3idea新建项 ...

  3. 如何在github上创建组织并对组织进行管理和团队协作开发项目

    日期: 2016-7-25 内容: 尊重原创: 本文转载至: http://www.cnblogs.com/haore147/p/4219673.html 2015-01-12 20:32 by 慧可 ...

  4. 利用github协作开发步骤

    项目使用IDEA开发,IDEA上可以加载很多的插件(而且下载很快),安装github插件,安装git 首先一个成员需要创建好代码库,这个代码库存放项目,所有的开发提交代码都是向这个库提交,在githu ...

  5. HelloX项目github协同开发指南

    概述 为了提高协同开发效率,HelloX项目已托管到github网站上.根据目前的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-p ...

  6. github项目团队协作开发流程

    数据分析绘图软件开发项目将由多人合作进行开发.测试.发布等工作,为了控制软件开发的版本管理.代码共享以及项目整合等,有必要采用git分布式版本管理工具进行项目版本管理和github开源平台作为代码仓库 ...

  7. swift项目嵌入flutter的module混合开发(framework模式:适合多人协作开发,一个负责混合开发)

    和之前一样,这个模块也是对于本地我们开发好的代码,需要到一起开发iOS的同事需要拉代码,调试的时候.这种静态包的方式就会好很多.不用在他的电脑上也搭建flutter环境,以及创建flutter项目的拉 ...

  8. Gitee多人协作进行项目开发的详细流程(创建多人仓库)

    我们在使用GitHub时,最常遇到的问题就是网页加载速度慢或者是无法打开 所以我们可以选择使用国内的Git代码托管平台--Gitee 这也是我们进行多人协作项目开发的实用工具 Gitee多人协作进行项 ...

  9. 10秒钟构建你自己的”造轮子”工厂! 2019年github/npm工程化协作开发栈最佳实践...

    发起一个github/npm工程协作项目,门槛太高了!! 最基础的问题,你都要花很久去研究: 如何在项目中全线使用es2017代码? 答案是babel 如何统一所有协作者的代码风格? 答案是eslin ...

最新文章

  1. SharePoint中Tab方式进行内容展现的WebPart
  2. Advice for students of machine learning--转
  3. java实验四 集合与函数式编程实验
  4. BZOJ3527: [Zjoi2014]力 [FFT]
  5. python 绝对路径找不到文件_python获取文件绝对路径解决找不到文件句柄的问题实例(readConfig.py)V1.2...
  6. Sentinel服务熔断只配置blockHandler_客户自定义限流处理_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0051
  7. EF中使用数据库的标量值函数
  8. 隐马尔可夫模型三个问题的求解(一)
  9. php 非聚集锁引,sql数据库聚集索引和非聚集索引示例
  10. Drools规则引擎之动态规则
  11. 思科模拟器之GNS3,GUI小凡的完美替代
  12. 常兴串口调试助手v3.6
  13. 百度识图.........
  14. EPLAN教程——工具栏详解(2)默认工具栏
  15. 计算机怎么打不开照相机图片,Win10系统相机打不开怎么办-电脑自学网
  16. Tableau计算同比和环比任意天数据
  17. 篮球的各个位置的职能!!!
  18. 使用openSSL制作SSL证书
  19. 人员离职it检查_公司软件开发人员离职信_检讨书
  20. Lawliet|Python学习笔记——turtle库

热门文章

  1. 我的 keylogger 终于搞定了。。
  2. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿
  3. msfvenom制作windows/linux/android/ios木马
  4. pf与ckf_CKF Kadat—彪悍又带着野性,坚固强度与尺寸的战术折
  5. 四位行波进位加法器_《城市:天际线》中的图灵机:用水电管道做一个四位加法器...
  6. 1javascript语法
  7. 宝塔面板 SSL 证书安装部署
  8. 反脆弱 做一个内心强大的人_需要强大的软件? 使它脆弱
  9. 光纤接入网广域网连接拓扑结构设计
  10. MFC窗口置顶代码实现