【轉載】一種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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章