Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GIT
github
【RT-Thread】记录一次对主仓的bsp进行修复并提交pr的总结
发布于 2024-10-02 19:05:06 浏览:282
订阅该版
[tocm] # 前言 第一次对RT-Thread主仓提交代码,过程中遇到了很多问题,之后经过慢慢的摸索,终于也是提交了一份pr,这里分享记录一下提交pr的过程以及一些注意事项 # PR的内容 首先,关于提交什么内容的pr,在主仓的issue下可以看到 [Issues · RT-Thread/rt-thread · GitHub](https://github.com/RT-Thread/rt-thread/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 提交的pr可以是里面提出的bug,也可以是管理员提出的一些任务,如果是想实现什么新的功能也可以提pr 这里以一个简单的修复bsp为例,告诉大家提交pr其实不难,不要感到有压力,而且哪怕最后的pr如果还有问题会有审核人员提出,社区里的大佬都很友善 # 拉取代码 首先是拉取仓库,打开主仓库 [GitHub - RT-Thread/rt-thread: RT-Thread is an open source IoT Real-Time Operating System (RTOS).](https://github.com/RT-Thread/rt-thread) ![image-20241001224426601.png](https://oss-club.rt-thread.org/uploads/20241002/ae214e653932d9cb00b7c90db7b774c5.png.webp) 将仓库fork到自己仓库,直接点确定就好了 在自己的仓库列表下就可以看到刚fork下来的仓库,找到对应的clone链接,我用是ssh的方式进行下载 ![image-20241001225533956.png](https://oss-club.rt-thread.org/uploads/20241002/da9d6318cfb2344487e60da9c63c6589.png.webp) > 注意:使用ssh的链接需要配置密钥,配置的方法可以参考一些文章 这里是相关的分享,写在了我的博客上 [Github使用SSH远程连接仓库配置方法记录 | 小彦同学的摸鱼空间](https://blog.alicization.site/article/2024/10/01/112aaa90-4859-80bf-9990-c84d0487e26e) 按教程配置好后,然后在本地电脑随便找个地方建个文件夹,拉取代码 在文件夹右键点击在终端中打开(也可以在gitbash中打开) ![image-20241002010820848.png](https://oss-club.rt-thread.org/uploads/20241002/77ccbd6d8755a81bce8ceafb06c8f82d.png) 输入命令回车开始clone仓库 ``` git clone 上面复制的地址 ``` 下载完后进入rt-thread文件夹,开始下一步 # 修复bsp 这里以新手任务里的apm32/apm32f030r8-miniboard为例子 [【新手任务】BSP编译错误 · Issue #7764 · RT-Thread/rt-thread · GitHub](https://github.com/RT-Thread/rt-thread/issues/7764) 首先找到该bsp对应的路径bsp\apm32\apm32f030r8-miniboard,并来到该目录下 ![image-20241002011130205.png](https://oss-club.rt-thread.org/uploads/20241002/49e021673ed5e701e13b90373f78d6fc.png) 同样是在空白处右键打开env 关于什么是env,env的配置可以参考其他文章,也可以在论坛搜索相关安装教程 https://club.rt-thread.org/ask/article/90ef2141d9b5ad10.html 这里主要用到env里面的编译,然后输入scons -j4尝试编译,有报错就解决报错,我这里只是弹了个警告,看着十分突兀,不能忍,改掉! ![image-20241002014938505.png](https://oss-club.rt-thread.org/uploads/20241002/59a1d397278d99a45d0b9bb843ef0593.png) 另外编译的时候可以采用scons --strict严格模式进行编译,这样警告也会被当作错误,就像这样 ![image-20241002015047230.png](https://oss-club.rt-thread.org/uploads/20241002/76a8cda66d6e672b7c0b75303f3d3358.png) ``` 然后在终端或者gitbash 输入code . 这就相当于在当前目录打开vscode 然后修改代码 ``` > 注:有时候想在引用函数的地方右键转到定义结果没法跳转可以在env输入scons --target=vsc生成一下vscode的配置文件 修改完后再次尝试编译,没有问题就来到下一步 ## 添加CI(按情况添加) 每当有新的代码提交或 PR 创建时,CI 系统会自动构建项目,以确保代码可以成功编译。 为了让当前的bsp在提交pr后自动编译一遍,所以就需要将bsp添加到ci里 打开.github\workflows\bsp_buildings.yml,在适当的位置添加bsp路径,然后保存 ![image-20241002040022455.png](https://oss-club.rt-thread.org/uploads/20241002/b1ecd68aa46c6c4a419940d71b02020d.png) 同时来到.github\workflows\manual_trigger_scons_except_STM32_all.yml下添加上bsp,这样就修改好了 ![image-20241002040116078.png](https://oss-club.rt-thread.org/uploads/20241002/92ef1bf50869ca29c02b930c2fed7bbd.png) ## 代码格式化 为了保证代码的规范性,比如说要删掉一些不必要的空格什么的,这里可以使用一个工具来自动对代码进行格式化 这里简单介绍下用法 > 注:这里需要提前把python装好才能用这个工具 [GitHub - mysterywolf/formatting: 源码格式自动化调整工具](https://github.com/mysterywolf/formatting) 随便找个地方clone下载下来 右键打开终端 输入pip install -r requirements.txt 安装依赖 然后输入python formatting.py 文件路径 这样就可以针对这个文件进行格式化,注意格式化后编译看下有没有出问题 ### 我遇到的问题以及解决办法 由于未知的原因,我发现我电脑运行这个程序打不开直接闪退,后面调试了一下发现似乎是comment-parser的问题,然后手动降了一下版本就好了 ``` pip install comment-parser==1.2.3 ``` 这个命令可以降低comment-parser的版本 ### 复制路径小技巧 ![image-20241002064828728.png](https://oss-club.rt-thread.org/uploads/20241002/99e07b08f0948beee32b7564f697f693.png) 在vscode对着文件右键能看到复制路径的按钮 ### 需要格式化的范围 首先只有.c .h这些代码要格式化 然后BSP的第三方HAL库不需要格式化,就rtthread自己的代码要格式化,比如drv_gpio.c这种 ## 修复bsp的一些技巧 - 1.修改的文件范围问题 修改代码尽量只修改当前bsp目录下的文件,不在当前bsp修改的代码需要另外提一份pr进行修改 - 2.善用vscode内部的文件搜索 当函数定义没法跳转时,可以搜索看看函数定义在哪个文件 - 3.善用搜索引擎和AI AI是大杀器,不会就问,还能学东西 - 4.修改代码的原则就是在尽量不影响原本的代码的情况修改得美观简洁,然后就是大胆改,有问题评论区会有人提建议的 # 暂存代码并提交同步到到远端仓库 ## 推荐一个vscode的git插件 正常的流程是保存然后提交commit ``` 用gitbash或终端在rt-thread目录下输入 git add 文件路径 //保存对应修改的文件 git add .//保存当前文件夹下所有修改过的文件 git commit -m "标题" //提交commit ``` 这里为了方便可以用vscode的一个小插件自动代替输入命令,安装后重新打开vscode即可 ![image-20241002020918130.png](https://oss-club.rt-thread.org/uploads/20241002/d92b3603cb1541009032a17383e705f4.png) ## 提交代码并同步到到远端仓库 来到rt-thread目录下(也就是刚把代码拉下来的目录)打开终端或者gitbash > 注:对git仓库的操作都要在仓库刚拉下来的那个文件夹里 首先举个例子 > 在进行代码修复时,经常的要对文件进行修改。但是我们在进行下一次修改时又会担心会跟之前的更改产生冲突,那么一个有效的解决方案就是单独复制一份rt-thread文件夹。 这时候就用到了Git 的分支功能。分支就像是在一个完全独立的区域内进行代码的修改,让你可以在不影响主代码库的情况下进行开发。 演示一下: ``` git chechout -b apm32/apm32f030r8-miniboard //这一行则是创建一个分支,分支名可以自己想一个,默认创建完后会自动跳转到该分支 注:git switch apm32/apm32f030r8-miniboard //这一行是跳转到某一分支 ``` 然后输入code .在当前目录下打开vscode(.点不要漏了,也可以在该文件夹处空白处右键打开vscode) 点击左边刚安装的插件 ![image-20241002021654191.png](https://oss-club.rt-thread.org/uploads/20241002/8806ae6624f026699849eb2b9a480ec8.png) 这里会显示所有修改过的文件,点击该文件还可以看到修改前后对比 点击这个就可以将文件进行暂存,这一步代替了git add ![image-20241002021740551.png](https://oss-club.rt-thread.org/uploads/20241002/54ac080563399ded56c1fc48ecd62d8b.png) 然后在上面消息处输入commit的标题,这一步就代替了git commit ![image-20241002022007622.png](https://oss-club.rt-thread.org/uploads/20241002/277b7d48a91e80820f8159eba4450fa8.png) > 注:标题最好要简介明确并写上做了的事情 然后提交,这时候左下角就可以看到本次提交的commit了,以及这个仓库以前提交过的commit ![image-20241002022204135.png](https://oss-club.rt-thread.org/uploads/20241002/1134aab31c52a5445bc267a4ee3f0875.png) 这时候就已经在本地仓库提交好了,然后是跟github里的仓库进行同步,也就是推送上去 ![image-20241002024542553.png](https://oss-club.rt-thread.org/uploads/20241002/31172db51a67d461c78b5dd2dd1604ee.png) 点击发布即可,这一步相当于执行了push ``` git push origin apm32/apm32f030r8-miniboard ``` 随后来到网页,fork的仓库,可以发现会有个黄色的提示,右边这个按钮就是提示是否要提交pr ![image-20241002024810409.png](https://oss-club.rt-thread.org/uploads/20241002/e5b4d02ef1464c786494c7219193c89e.png) 点击进去,这里就是提交pr的地方,按照里面预设的模板填写好描述就可以点击右下角按钮提交了 ![image-20241002024958985.png](https://oss-club.rt-thread.org/uploads/20241002/91f41f35e17eb84ff90a2301253b8c54.png) 提交pr后,可以按描述里的事项确认后进行打✔ ![image-20241002065755133.png](https://oss-club.rt-thread.org/uploads/20241002/8162204ab6ea302e66cd7dadb920af56.png) 然后pr的页面下方是类似于评论区,别人可以对这个pr进行评论 第一次提交rtthread仓库需要签署CLA协议 ![image-20241002030657124.png](https://oss-club.rt-thread.org/uploads/20241002/6cdbd4395e1aa46ccadd1f86f6aa52d5.png) 点击蓝色的超链接跳转过去确认就好了 那么第一份pr就算是提上来了,接下来就是检查ci有没有问题和等待审核通过 ## 提交的技巧 - 1.最后提交的文件不要提交跟本次pr不相干的 比如说:某个bsp在编译的时候生成了个执行文件,结果被git识别到了,就像这样,这时候可以单独对这个文件放弃修改 ![image-20241002182951316.png](https://oss-club.rt-thread.org/uploads/20241002/49e9d4391219926dbe1697cdd29c8461.png) # 检查ci 来到pr网页的最下面可以看到类似这样的,这里用另外一个例子演示 ![微信图片_20240930103021.png](https://oss-club.rt-thread.org/uploads/20241002/908a819cbe8438dc158131b0cfeeb402.png) 当有一个ci出现问题的时候会出现一个左边的圈圈会变成❌,这时点击右边的Details就可以查看问题在哪 这里我演示的错误是,文件格式出现的错误,展开错误的地方,翻译一下然后回到vscode修改好错误进入下一步 ![image-20241002031322497.png](https://oss-club.rt-thread.org/uploads/20241002/870265ad984c000c4aa7b2703c5ba028.png.webp) # 返厂维修 pr已经提交上去了,发现ci报错或者有其他原因还要修改怎么办? 这时候不要慌,分支的作用就体现出来了,之后在该分支提交并推送的代码都都会算到当前分支提交的pr里 修改完后按照上面的提交步骤重新操作一次就好了 # 最后 pr提交后可以留意下评论区,有问题会有大佬留言,可以根据大佬提出的意见进行修改 另外,审核这个pr的人也会帮你看有没有什么问题 审核通过后就会被合并进主仓库,你的pr就算是完成了 主要的部分讲完了,接下来是拓展的内容,可以按需取用 # 其他拓展 ## pr界面介绍 ![image-20241002070304645.png](https://oss-club.rt-thread.org/uploads/20241002/d0dec2146726f0c78a13d9d58a5c19af.png) - 第二个是查看这个pr提交了多少次commit - 第三个是查看这个pr的ci - 第四个可以看到这个pr最后修改过的所有文件的对比 ## 融合commit 当我们在一个pr进行了多次提交后,会发现commit列表里都是记录着同一件事的提交,就像这样,这样不太美观 ![image-20241002070759996.png](https://oss-club.rt-thread.org/uploads/20241002/4c8f97453172e0f96d1bb17dacb741df.png) 这时可以把这些提交合成一个提交 来到刚才提交git的终端或者gitbash 输入以下命令,比如我这里要把2个融合成一个 > git rebase -i HEAD~2 ![image-20241002071449175.png](https://oss-club.rt-thread.org/uploads/20241002/17fcec1276b3a358a8d9dd4615032956.png) 这时就会弹出一个编辑的地方,按下键盘的i进入编辑模式,光标通过上下左右移动到pick的位置将pick改为s,第一个pick保留不要改,然后改完后按下ESC,输入:wq就可以保存并自动退出了(这些是vim的命令) 然后他又会弹出一个编辑的地方,这里需要删除掉第一次commit以外其他commit的描述,将光标移动到需要删除的那一行按下dd即可删掉那一行(小心点别删多了),然后:wq就可以保存并自动退出了 ![image-20241002071716485.png](https://oss-club.rt-thread.org/uploads/20241002/ceea19bdcb82c0167912b97194080b63.png) 输入git log可以查看历史的commit,可以看到确实已经合成一个了,然后就是跟远程仓库同步push一下 这里使用push的话需要强制push,也就是加上-f(另外其他遇到需要强制push的也可以这样用) ``` git push origin apm32/apm32f030r8-miniboard -f ``` ## 追加提交 上面的融合提交看起来有些复杂,那么有没有简单点的办法? 可以用追加提交的方式将提交融入到上次的提交里 ``` git commit --amend ``` 这样就可以不用git rebase修改得这么复杂了 输入该命令后,就会弹出一个编辑界面,如果不懂vim操作的可以直接按下:wq即可自动保存退出了(这个编辑界面得作用就是让你修改提交的文本) ## 将pr转为草稿模式 当这个pr还在修改中不需要审核怎么办呢,可以通过转为草稿,这个按钮在pr页面的右边 ![image-20241002070145293.png](https://oss-club.rt-thread.org/uploads/20241002/2ff98bac37bec0461f47a910b338e998.png) ## 当提交后想要撤回提交 ``` git reset HEAD^ ``` 回退到上一次commit ## 重置大法 当不小心把本地仓库玩坏了该怎么办,重置的原则就是尽量不影响远端仓库的情况把文件恢复到之前的版本 ### 1.还没将修改push到远端仓库的(也就是github上) ``` git reset --hard origin/分支名 ``` 这个命令可以把文件回退到一定的版本,具体可以自己试一下 而且也可以通过git reset --hard commitID 的方式回到特定的版本,用git log可以看到历史的提交以及commitID 另外提一下,reset这个命令有很多用法,比如重置的时候还可以保留修改过的代码,可以自己搜一下,如果经常把仓库玩坏,那么这个命令会经常用到 ### 2.已经push到远端仓库了 最快的方法就是不要这个分支了,重新创一个分支 # 结语 提交pr其实是个会很灵活的过程,包括git的使用这些,刚开始用确实感觉很复杂,但是如果只是用刚好自己需要的命令,慢慢的这样一点点学起就会容易很多 # 引用 学习添加pr的过程可以多看看类似的文章,本身添加pr就是一个很灵活的过程,有些时候能达到目的的方法往往不止一个,多试试才能融会贯通 [新手任务 | 提交PR · Issue #7426 · RT-Thread/rt-thread · GitHub](https://github.com/RT-Thread/rt-thread/issues/7426) [【示例】如何给RT-Thread提交PR | beautify code by mysterywolf · Pull Request #5890 · RT-Thread/rt-thread · GitHub](https://github.com/RT-Thread/rt-thread/pull/5890) [RT-Thread-如何快速向RT-Thread提一个PR:以CI为例RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/0b4c0d3b999554d0.html) [RT-Thread - 记录开源小白的第一次 PRRT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/5a3155877b44066c.html) # 作者的话 文章写的可能有点乱,有些地方表达不太好,还请读者谅解,后续可能也会根据评论区的建议进行修改
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
alight
该用户没有签名
文章
8
回答
0
被采纳
0
关注TA
发私信
相关文章
1
用GIT GUI的时候每次PUSH都要手动填一遍目标仓库地址?
2
git上面的图片加载不出来,有其他可以看BSP 制作教程的方法吗
3
gitee这几个版本怎么分别
4
packages 的 git失败
5
软件包的镜像地址怎么找呢
6
关于tortoisegit的push操作
7
RTT Studio 内置git 推送不到远程gitee仓库
8
git软件包失败下载失败,找不到CA路径?
9
studio内置的git该如何使用
10
RT-Thread studio的git功能可以直接使用吗?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部