【转载】一种git commit前自动格式化的方式
简介
这个系列为了解决一个问题:自动化的去管理代码风格和格式
前提:Linux,C语言,Clang
如何在每次commit的时候,将代码风格自动格式化后再提交commit,且格式化的内容必须是本次commit中的内容。
这个需求看似很简单实现,但是做到后来我发现,要把这个需求做完美并没有这么容易
我将一步步的去尝试实现最完美的状态:
- 自动格式化代码
- 只格式化
staged changes - 完整保留
changes not staged现场 - 漂亮的输出Clang干了啥
这里会大量的使用关于Bash脚本和Git的相关知识点
最终版使用方法
目录结构
我会提供一个cpt(c programing tools)的目录,这个目录会放入所有脚本及其依赖的工具,以及一个test工程
~/cpt
├── clang
├── .git_template
│ └── hooks
│ └── pre-commit
└── test_clang
├── .clang-format
└── hello
├── main.c
├── test_math.c
└── test_math.h
clang使用的版本是 clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04.git_templategit模版及相关脚本目录test_clang测试工程
使用方法
集成包:cpt-1.00.tar.gz
#首先将工具解压缩
tar zxvf cpt-1.00.tar.gz
#移动到用户根目录
mv cpt ~
#配置git
git config --global init.templatedir ~/cpt/.git_template
#开始测试使用
cd ~/cpt/test_clang/hello
git init
git add .
git commit -m "init"
#故意将代码格式改错
git add .
git commit -m "test"
注意:如果你的项目已经用git管理,在完成上述步骤后,你只需要将~/cpt/.git_template/hooks/pre-commit文件复制到你对应项目中的.git/hooks目录中即可
cp ~/cpt/.git_template/hooks/pre-commit .git/hooks
【转载】一种git commit前自动格式化的方式的更多相关文章
- git commit前检测husky与pre-commit 提交钩子
git commit前检测husky与pre-commit git commit前检测husky与pre-commit - 简书 https://www.jianshu.com/p/f0d31f92b ...
- git commit -a -m "DM 1、获取aliOssSTS值,计算签名,实现视频PUT/POST2种上传方式上传;"
git commit -a -m "DM 1.获取aliOssSTS值,计算签名,实现视频PUT/POST2种上传方式上传:" 微信小程序的视频上传
- 在git push前怎样遗弃掉历史commit
今天写了一天代码,然后 git hub commit 了 多达 7 次. 可是都没有把改动正式推送上去. 结果最后要推送的时候发现中间有一个提交文件超过了100M. 是 vs 的代码性能分析报告 .v ...
- 自家公司关于git commit 的规范
代码提交的commit info提个建议,fix的issue是哪个issue?都要有明确的链接.推荐方式:1.建立issue,说明问题的背景和原因.http://git.startdt.net/pay ...
- 项目git commit时卡主不良代码:husky让Git检查代码规范化工作
看完 <前端规范之Git工作流规范(Husky + Commitlint + Lint-staged) https://www.cnblogs.com/Yellow-ice/p/15349873 ...
- Git commit message和工作流规范
目的 统一团队Git commit日志标准,便于后续代码review,版本发布以及日志自动化生成等等. 统一团队的Git工作流,包括分支使用.tag规范.issue等 Git commit日志参考案例 ...
- git commit 、CHANGELOG 和版本发布的标准自动化
一直以来,因为团队项目迭代节奏很快,每次发布的更新日志和版本更新都是通过人肉来完成的.有时候实在忙的团团转,对于手动的写这些更新信息就显得力不从心了.对于团队新来的小伙伴,有时候遇到些紧急情况,就更显 ...
- IDEA 中 Git Commit message 编写
IDEA安装插件 Git Commit Template 1. HeaderHeader的部分只有一行,包括三个字段: type(必需), scope(可选), subject(必需) 对应到idea ...
- 如何规范git commit提交
相信很多人使用SVN.Git等版本控制工具时候都会觉得每次提交都要写一个注释有什么用啊?好麻烦,所以我每次都是随便写个数字就提交了,但是慢慢的我就发现了,如果项目长期维护或者修改很久之前的项目,没有一 ...
随机推荐
- js原生方法filter实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PCANBasic开发(二)
使用Peak的PCan转换器开发,使用其中的PCanBasic.dll // PCANBasic.cs // // ~~~~~~~~~~~~ // // PCAN-Basic API // // ~~ ...
- Java堆内存中为什么有两个survival区及为什么与年轻代比例是1:1:8?
Java堆内存分为年轻代和老年代,其中,年轻代分为Eden区和survival区,survival又分为fromSurvival和toSurvival. 首先第一个问题:为什么要有Survival区? ...
- Java为什么称为动态编译?
Java在程序运行时产生Java类并编译成.class文件.
- 升级openssl和openssh版本
一.安装telnet-server服务(建议安装) 1. 查看系统是否已安装telnet-server,linux系统上默认已经安装telnet-client(或telnet),而telnet-ser ...
- shell--数据库备份脚本
#!/bin/bash #数据库的完全备份 #把日期显示为170605(这个是当前的时间)的格式 date=$(date +%y%m%d) #计算下这个备份的数据库文件的大小 size=$(du -s ...
- mybaties 使用注解注入动态sql (if-else)-转义字符
看到网上使用注解动态注入sql都是判断参数是否为空,我做项目的时候需要判断参数是否为字符串,需要对引号进行转义,所以把代码贴过来了. 注意:test表达式不能引用传入的参数,直接使用参数即可----- ...
- Docker安装RabbitMQ与Kafka
RabbitMq安装(dokcer) 下载镜像 docker pull rabbitmq 创建并启动容器 docker run -d --name rabbitmq -p 5672:5672 -p 1 ...
- 牛客挑战赛46 C
题目链接: 排列 考虑\(dp\),我们思考如何设计状态 将第i个数插入i-1个数中,我们考虑会新增多少个超级逆序对 假设将\(i\)插入后\(i\)的位置为\(l\),\(i-1\)的原来的位置为\ ...
- 图解Python中深浅拷贝
在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...