Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GIT
看完这篇文章再也不用担心代码格式不对无法合并了
发布于 2021-10-31 22:39:29 浏览:1145
订阅该版
[tocm] GITHUB仓库: [git_auto_script](https://github.com/supperthomas/git_auto_script) 欢迎START和提issue。有好的建议可以PR或者提issue。 ## 一、简介 - 你是否会遇到过忘记使用formatting脚本来整理下代码,导致RTTHREAD PR不通过打回去重新修改? - 你是否总是忘记整理那些astyle的格式问题,总是提交的代码不够美观?总是因为空格TAB等格式问题,让熊大等合并者头疼? - 你是否总是有些bug是因为没有经过静态检查,导致后面bug一大堆? 来看下这个软件吧,保证对你有一定帮助,而且在做其他项目的时候这个软件包也可以使用。 本软件包通过整合cppcheck(静态编译软件), astyle(格式化代码), formatting(RTTHREAD格式整理) 三款软件,将这三款软件整合到git的hook中,让你以后提交代码再也不要担心被CI的formatting检测出问题重新提交了。 本软件一次部署长期有效,只要你的git仓库没有更换,就一直有效。 当然如果有好的建议或者修改,欢迎PR,我们大家一起来维护。 当然也如果有更好的软件或者更好的需求,也欢迎在issue里面提出来。 ## 二、如何使用 第一次使用可能会麻烦一点,不过我觉得这个就是一劳永逸的事情,后面就几乎无感了。 ### 2.1 CPPCHECK STEP1: [CPPCHECK官网](http://cppcheck.net/) 下载安装 STEP2: 环境变量path添加cppcheck路径 STEP3:命令行里面执行cppcheck命令,可以用即可 ### 2.2 ASTYLE STEP1: [ASTYEL官网](https://sourceforge.net/projects/astyle/) 下载解压 STEP2: 环境变量path添加astyle路径 STEP3:命令行里面执行astyle命令,可以用即可 ### 2.3 formatting 这个是来自[formatting.py](https://github.com/mysterywolf/formatting) 的自动化脚本,这边我把这个python脚本整理成exe命令行的形式: STEP1: 直接clone[git_auto_script](https://github.com/supperthomas/git_auto_script.git)目录 STEP2: 将Windows_exe 文件夹添加到path环境变量中 STEP3: 命令行里面执行formatting 可以用即可 生成exe采用命令(这一步我已经弄好放到Windows_exe中,通常不需要操作,如果需要更新的话在formatting.py目录下执行下面操作) ``` pyinstaller --onefile --nowindowed formatting.py ``` ### 2.4 pre-commit安装 将 RTTHREAD_auto/pre-commit拷贝到你的工程的`.git/hook` 文件夹下面,以后commit无需操作任何操作就可以直接commit 无需考虑formatting或者格式问题或者静态检查问题 ![image-20211025223018211.png](https://oss-club.rt-thread.org/uploads/20211031/6523ab533a7745414859ba6d1da938fd.png) 好了, 一切ready。 这个时候,只要你正常commit,你就会发现,你的代码格式已经经过astyle优化过了,如果代码静态检查有问题,会commit不过,并且提示你需要修改,同时也是经过formatting的修改了。之后再也不用担心PR会有格式上的问题了。 下面看下动画演示: ![help.gif](https://oss-club.rt-thread.org/uploads/20211031/f1a579a6bb5f492ba8860c56ef423f94.gif) GITHUB仓库: [git_auto_script](https://github.com/supperthomas/git_auto_script) 欢迎START和提issue。又好的建议可以PR或者提issue。 ## 三、FAQ ### 3.1 cppcheck和astyle等命令在哪里可以去掉? 在pre-commit文件夹中,找到cppcheck命令和astyle命令和formatting命令,前面加`#`就可以去掉 如下所示:注释掉所有的命令,就不会执行自动化脚本了 ``` if [ -n "$changed_files" ]; then #cppcheck --enable=warning,performance,portability --inline-suppr --error-exitcode=1 --force $changed_files err=$? if [ $err -ne 0 ]; then echo "Hello! we found a obvious fault, please fix the error then commit again" exit $err fi fi # We only filter the file name with c or cpp file. changed_files=$(git diff-index --cached $against | \ grep -E '[MA] .*\.(c|cpp|h)$' | cut -d' ' -f 2) if [ -n "$changed_files" ]; then #astyle --style=allman --indent=spaces=4 --indent=spaces=4 --indent=spaces=4 --pad-header --pad-header --pad-header --align-pointer=name --lineend=linux --convert-tabs --verbose $changed_files #formatting $changed_files git add $changed_files fi ``` ### 3.2 commit 之后文件夹下面多出来一些奇怪的文件是否可以去掉 生成一些*.orig文件是由于astyle对文件进行了修改,为了防止改错文件,将源文件做了备份,如果不想要的话可以在astyle命令下面添加下面的选项来去掉: ``` --suffix=none ``` ### 3.3 cppcheck 的选项的含义 cppcheck选项可以参考官方[manual](http://cppcheck.net/manual.pdf) astyle 选项参考官方的[astyle option](http://astyle.sourceforge.net/astyle.html) 本项目主要目的是提供一种自动化的commit机制,如果觉得cppcheck机制和astyle机制不好用,可以注释掉或者用其他的命令替换掉,也欢迎提供一些比较好用的免费的方便的软件。 astyle的选项,参考RTTHREAD官方文档 ### 3.4 pre-commit是否可以在主仓库中保留 目前我觉得是无法在仓库中保留的,欢迎大家提出好的idea。我也希望能有好的方法在主仓库保留
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
RTT_逍遥
https://github.com/supperthomas
文章
36
回答
500
被采纳
75
关注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
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部