GitHub协作开发项目
文章目录
- 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协作开发项目相关推荐
- github多人协作开发项目教程,2021新版。
文章目录 github多人协作开发项目教程 文章目录 文章目录 一. 必要理论知识 二. 进行实操 1. 管理者方面 2. 成员方面 三. 总结 一. 必要理论知识 github合作开发,在实操之前, ...
- idea整合gitte团队协作开发项目
目录 1.相同步骤 1.1下载gitte 1.2.安装gitte 1.3注册一个gitte账号 2.不同步骤 2.1项目发起者 2.1.1新建远程仓库 2.1.2新建项目文件 2.1.3idea新建项 ...
- 如何在github上创建组织并对组织进行管理和团队协作开发项目
日期: 2016-7-25 内容: 尊重原创: 本文转载至: http://www.cnblogs.com/haore147/p/4219673.html 2015-01-12 20:32 by 慧可 ...
- 利用github协作开发步骤
项目使用IDEA开发,IDEA上可以加载很多的插件(而且下载很快),安装github插件,安装git 首先一个成员需要创建好代码库,这个代码库存放项目,所有的开发提交代码都是向这个库提交,在githu ...
- HelloX项目github协同开发指南
概述 为了提高协同开发效率,HelloX项目已托管到github网站上.根据目前的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-p ...
- github项目团队协作开发流程
数据分析绘图软件开发项目将由多人合作进行开发.测试.发布等工作,为了控制软件开发的版本管理.代码共享以及项目整合等,有必要采用git分布式版本管理工具进行项目版本管理和github开源平台作为代码仓库 ...
- swift项目嵌入flutter的module混合开发(framework模式:适合多人协作开发,一个负责混合开发)
和之前一样,这个模块也是对于本地我们开发好的代码,需要到一起开发iOS的同事需要拉代码,调试的时候.这种静态包的方式就会好很多.不用在他的电脑上也搭建flutter环境,以及创建flutter项目的拉 ...
- Gitee多人协作进行项目开发的详细流程(创建多人仓库)
我们在使用GitHub时,最常遇到的问题就是网页加载速度慢或者是无法打开 所以我们可以选择使用国内的Git代码托管平台--Gitee 这也是我们进行多人协作项目开发的实用工具 Gitee多人协作进行项 ...
- 10秒钟构建你自己的”造轮子”工厂! 2019年github/npm工程化协作开发栈最佳实践...
发起一个github/npm工程协作项目,门槛太高了!! 最基础的问题,你都要花很久去研究: 如何在项目中全线使用es2017代码? 答案是babel 如何统一所有协作者的代码风格? 答案是eslin ...
最新文章
- SharePoint中Tab方式进行内容展现的WebPart
- Advice for students of machine learning--转
- java实验四 集合与函数式编程实验
- BZOJ3527: [Zjoi2014]力 [FFT]
- python 绝对路径找不到文件_python获取文件绝对路径解决找不到文件句柄的问题实例(readConfig.py)V1.2...
- Sentinel服务熔断只配置blockHandler_客户自定义限流处理_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0051
- EF中使用数据库的标量值函数
- 隐马尔可夫模型三个问题的求解(一)
- php 非聚集锁引,sql数据库聚集索引和非聚集索引示例
- Drools规则引擎之动态规则
- 思科模拟器之GNS3,GUI小凡的完美替代
- 常兴串口调试助手v3.6
- 百度识图.........
- EPLAN教程——工具栏详解(2)默认工具栏
- 计算机怎么打不开照相机图片,Win10系统相机打不开怎么办-电脑自学网
- Tableau计算同比和环比任意天数据
- 篮球的各个位置的职能!!!
- 使用openSSL制作SSL证书
- 人员离职it检查_公司软件开发人员离职信_检讨书
- Lawliet|Python学习笔记——turtle库
热门文章
- 我的 keylogger 终于搞定了。。
- JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿
- msfvenom制作windows/linux/android/ios木马
- pf与ckf_CKF Kadat—彪悍又带着野性,坚固强度与尺寸的战术折
- 四位行波进位加法器_《城市:天际线》中的图灵机:用水电管道做一个四位加法器...
- 1javascript语法
- 宝塔面板 SSL 证书安装部署
- 反脆弱 做一个内心强大的人_需要强大的软件? 使它脆弱
- 光纤接入网广域网连接拓扑结构设计
- MFC窗口置顶代码实现