当前位置: 首页 > news >正文

论如何参与一个开源项目(中)

文章目录

  • 写在前面的话
  • 第二步:Fork仓库
    • 保证分支仓库和主仓库同步
    • (1)在GitHub上进行同步
    • (2)在idea上进行同步
  • 第三步:编写代码
  • 别急

写在前面的话

本篇我们要讲的是如何开始向开源项目编写代码,没有看上篇的同学可以先去看一下上篇的内容噢!

上篇地址:https://blog.csdn.net/little_stick_i/article/details/127162039

第二步:Fork仓库

是时候开始进行项目的开发了!可是我们应该把代码写在哪里呢?

直接把代码下载下来,然后在本地开始写代码,写完代码再通过社交软件发送给项目的管理人员吗?当然不是,这一点都不Git。

我们应该先将原仓库Fork到自己的仓库里(在项目首页的右上角),相当于把这个仓库深拷贝一份到我们自己的仓库里。因为这样我们才有编辑的权限,写完代码以后才能将代码提交到GitHub上

image-20221002201836732

点击 Create fork 即可

image-20221002201855519

Fork成功之后,在我们自己的仓库里就会有一份与原仓库一样的仓库,并且这个仓库是我们自己的,这意味着我们可以在这个仓库里进行任意的代码更改,But原仓库我们仍然是没有权限的。

所以我们将来编写代码的时候,就是在这个仓库上进行操作的。

现在我们将代码拉取到本地,我比较喜欢使用idea进行git操作,这个url记得用自己仓库的url:

image-20221002203701120

保证分支仓库和主仓库同步

仓库Fork以后,会出现一个新的问题:原仓库会有人更新代码,但我们的仓库不会被自动更新,就会导致两个仓库的进度不一致,将来提交PR的时候就可能会造成合并冲突。所以我们每次写代码和提交代码之前,最好都要先去同步一下我们的仓库。

(1)在GitHub上进行同步

点击分支仓库的Sync fork按钮,可以对分支进行更新操作:

image-20221002202942702

(2)在idea上进行同步

有时候我们使用方法一解决冲突可能会比较麻烦,因为在网页上操作没有那么方便,所以我更建议大家使用这个方法二。

  1. 首先在本地git仓库中添加多个远程仓库,右键点击远程,然后会弹出一个管理远程,点进去就可以配置远程仓库了

    image-20221003114242833

    这是我配置好的远程仓库,第一个main是源项目的仓库,第二个mine是我自己的(我用来演示的账号名就叫scblogs),我给他们分别取了对应含义的名称:

    image-20221002205509020

    然后我们点左边的fetch刷新一下,就可以看到有两个远程了:

    image-20221002205715905

  2. 当我们要准备写代码和提交代码之前,先fetch一下远程仓库,看看网络图,主仓库里有没有更新些什么东西

    image-20221002213334812

    我们发现远程的主仓库的main分支已经超过了当前我的分支(那个黄色的标记就是本地的当前分支),两个仓库不一致的时候(看不清可以放大),那我们就要及时的去拉取主仓库main分支的代码,将自己的仓库进行更新。

  3. 拉取代码的时候选择主仓库的main分支,然后点拉取,就会更新合并到本地分支代码了:

    image-20221002213651415

    更新之后,我们当前分支已经处于最新的版本了:

    image-20221002213757919

第三步:编写代码

没什么好说的,写代码就好了。

  • ==在我们写代码之前,最好先看看项目的贡献者说明,或许我们在参与某项目之前就应该先看这个。==一般是主目录下的一个叫做 CONTRIBUTING.md 的文件,里面会写一些注意事项,包括代码规范和编写代码的一些操作、流程、步骤等,仔细阅读这份文档,可以保障我们的更好的参与项目的贡献。

    image-20221002213913287

  • ==写的过程中如果遇到了疑问,及时向社区提问,以免自己白费一通力气。==一个有活力的社区,一定会有人及时回复你的。不过也要注意提问的内容,有些东西能在搜索引擎上获得答案的,就不要去打扰别人了。

  • ==对了,在你提交代码的时候,最好把每次提交的内容都尽可能的进行细分。==比如,我现在正实现用户排行榜的功能,而用户排行榜又分为了用户活跃排行榜和用户等级排行榜,那么我应该将它们分成两次提交,且每次提交都只添加跟当前提交描述相关的代码。又或者,我在实现排行榜功能的过程中,发现了一个之前遗留的bug,那么我应该将解决这个bug的代码进行单独的一次提交。

    这样将提交细分的好处就是,将来管理员要对你的代码进行审查的时候,他将会更清楚的知道你每行代码的目的,也会更方便于历史提交信息的查询。

  • 然后就是写代码,写完了,commit 提交,然后 push 到自己的仓库上去,如果这时候发现主仓库的main分支有更新的代码,最好也手动同步一下,并将冲突解决。

  • 温馨提示:在提交代码之前,最好先自己对自己的代码进行一次审查,在idea的提交界面,可以很方便的对自己修改过的代码进行审查。审查的过程中注意判断,只提交那些有意义的代码,有些调试过程中留下的代码,是不应该被提交的:

    image-20221003152834948

此时我已提交并推送完毕:

image-20221003150944368

别急

看完上面的内容,相信你已经掌握了如何向开源项目编写代码了,下次我们就要将本次编写的代码提交到项目上去啦!

学会的同学可以去练习啦!

由于文章的篇幅比较长,所以我准备把它拆分成了三篇进行发布,今天就先写到这里啦,明天继续给大家更新,到时候我会把第三篇的链接放在这里噢🥰🥰🥰🤣🤣🤣。

相关文章:

  • java中对jvm参数的调整进行调优
  • MySQL并发事务访问相同记录
  • 利用UART串口实现数据的收发
  • 虚幻引擎5 C++游戏开发教程
  • 【GNN报告】GNN可解释性 基于几何与拓扑特性的图学习
  • Hadoop3 - HDFS 介绍及 Shell Cli 操作
  • Java~数据结构(三)~栈和队列(Stack\Queue\Deque的常用方法和模拟实现一个栈和队列等)
  • 股票API下单接口是怎样传入交易数据的?
  • 【C++初阶】C++入门篇(二)
  • 点云LAS格式分析
  • 关于我的家乡html网页设计完整版,10个以家乡为主题的网页设计与实现
  • 有营养的算法笔记(二)
  • 10.5 - 每日一题 - 408
  • 递归、分治算法刷题笔记
  • 微服务架构秘籍:SpringCloud+SpringCloud Alibaba,全网疯传
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ComponentOne 2017 V2版本正式发布
  • Laravel 菜鸟晋级之路
  • PHP 7 修改了什么呢 -- 2
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue中实现单选
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 每天10道Java面试题,跟我走,offer有!
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我感觉这是史上最牛的防sql注入方法类
  • 说说我为什么看好Spring Cloud Alibaba
  • ​ssh免密码登录设置及问题总结
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​什么是bug?bug的源头在哪里?
  • #13 yum、编译安装与sed命令的使用
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (python)数据结构---字典
  • (二)WCF的Binding模型
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转)菜鸟学数据库(三)——存储过程
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net web项目 调用webService
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net中生成excel后调整宽度
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @在php中起什么作用?
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [.net] 如何在mail的加入正文显示图片