查看原文

简介

这个系列为了解决一个问题:自动化的去管理代码风格和格式

前提: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

最新文章

  1. 对js中Function的浅见
  2. linux:档案权限
  3. GCC编译器
  4. Git Book 中文版 - Git的撤消操作 - 重置, 签出 和 撤消
  5. 人工智能2:智能Agent
  6. C++输入和输出
  7. require.js 源码解读——配置默认上下文
  8. Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
  9. Linux进程实践(3) --进程终止与exec函数族
  10. Angularjs interceptor
  11. main 及Scanner
  12. vue回调函数无法更改model的值
  13. poj1436水平可见线
  14. 洛咕 P2403 [SDOI2010]所驼门王的宝藏
  15. PHP读取大文件的几种方法
  16. java并发编程实战:第八章----线程池的使用
  17. 50+ Useful Docker Tools
  18. 如何判断linux使用的是HDD还是SSD、HHD;磁盘阵列RAID
  19. JS正则表达式从入门到入土(5)—— 量词
  20. spring-boot 加入拦截器Interceptor

热门文章

  1. IntelliJ IDEA 学习笔记
  2. JQuery获取父,子,兄弟节点
  3. 数组编程题(github每日一题)
  4. Power BI八年回望记
  5. SpringBoot 拦截器和自定义注解判断请求是否合法
  6. IOS开发中实现UITableView按照首字母将集合进行检索分组
  7. 一文带你彻底了解大数据处理引擎Flink内存管理
  8. react第七单元(组件的高级用法-组件的组合(children的用法)-高阶组件-封装组件)
  9. sychronized的实现原理和应用
  10. 1款开源工具,实现自动化升级K3S集群!