【转载】一种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_template
git模版及相关脚本目录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等版本控制工具时候都会觉得每次提交都要写一个注释有什么用啊?好麻烦,所以我每次都是随便写个数字就提交了,但是慢慢的我就发现了,如果项目长期维护或者修改很久之前的项目,没有一 ...
随机推荐
- 谷歌SameSite策略
当我新下载谷歌80.x版本的时候,访问一个系统(内嵌跳转到其他系统的iframe),跳转过去没有携带cookie,以前版本的谷歌浏览器是可以的,控制台提示SameSite策略,给阻止了cookie携带 ...
- nginx 静态化合集(去掉index.php目录)
访问某域名时,去掉index.php目录时达到效果一样 如:www.test1/index.php/test2跟www.test1/test2效果一致 在vhosts.conf中加重写就可以了 loc ...
- Layui事件监听(表单和数据表格)
一.表单的事件监听 先介绍一下几个属性的用法 1.lay-filter 事件过滤器 相当于选择器,layui的专属选择器 2.lay-verify 验证属性 属性值可以是 :required必填项, ...
- 20201203-5 批量发送 email【】
1-1 批量发送 email 1 from openpyxl import load_workbook 2 import smtplib 3 from email.mime.text import M ...
- Java中CAS原理分析(volatile和synchronized浅析)
CAS是什么? CAS英文解释是比较和交换,是cpu底层的源语,是解决共享变量原子性实现方案,它定义了三个变量,内存地址值对应V,期待值E和要修改的值U,如下图所示,这些变量都是在高速缓存中的,如果两 ...
- jenkins配置--上传代码,定时执行用例,发送测试报告
1.安装条件:jdk1.8以上的,百度jenkin进入官网--download ,根据需要的版本下载 2.jenkins概念:持续集成,jenkins开源属于插件式形式进行管理的,选择性的装插件,支持 ...
- 第一次软件工程与UML的编程作业
博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/ 作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018S ...
- 牛客练习赛 73 D
题目链接 离别 离线算法+线段树 容易发现当我们枚举右端点r时,符合条件的左端点是一段连续的区间 我们可以用队列来维护这个连续区间的左右端点 当枚举到端点\(i\)时,将下标\(i\)插入到队列\(q ...
- 03-flask-视图函数基础
代码 from flask import Flask, request, url_for, jsonify, redirect # 创建Flask对象 app = Flask(__name__) @a ...
- Spark-2-性能监控方式
1 Spark Web UI Spark提供了一些基本的Web监控页面,对于日常监控十分有用. 通过http://master:4040(默认端口是4040,可以通过spark.ui.port修改)我 ...