簡介
這個系列爲了解決一個問題:自動化的去管理代碼風格和格式
前提: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