根据从网上的资料调查看,要想开发人员修改并提交项目时能够自动格式化代码,就要在git下的hooks目录添加钩子,从而实现自动化格式代码。但是hooks目录属于.git目录下,而.git目录是由git工具自身控制和维护的(当我们从远程克隆一个已存在的Git仓库时,Git工具会自动生成这个.git目录,用于存储仓库的所有元数据和历史信息),我们没法改变他原有的东西,所以需要我们显性的去添加一个钩子脚本。如下所示:
这样当我们使用commit命令时就会调用.git/hook/pre-commit文件,实现提交代码自动格式化被修改并保存在暂存区的文件。
以下是按照项目根目录的.clang-format文件格式化被修改且保存在暂存区的.c和.h文件。
#!/bin/bash
STYLEARG="-style=file"clang_format_file()
{
file="${1}"
if [ ! -z "${STYLEARG}" ]; then
echo "clang-format ${file}"
clang-format -i ${STYLEARG} ${1}
git add ${1}
fi
}case "${1}" in
--about )
echo "Runs clang-format on source files"
;;* )
for file in `git diff-index --cached --name-only HEAD | grep -E '\.(c|h)$'`; do
clang_format_file "${file}"
done
;;
esac