多人合作的项目里,格式化是一个问题。可能有些人的代码没有格式化,可能有些人的代码格式化配置不同。这里提出一种方案,来实现自动化的,风格相同的代码格式化方案。 注意,此方案没有实践过。
git pre-commmit hook
git 支持一些hook,可以在指定的一些时间发生时,执行这些hook。 pre-commit hook就是在commit前自动执行的脚本。 此方案在pre-commit hook里执行格式化步骤。
一个示例文件
以下是我刚刚配置的git pre-commot hook文件
#!/bin/sh
changed_files="$(git diff --cached --name-only --diff-filter=d | grep ".py$" | tr '\n' ' ')"
black $changed_files
git add $changed_files
下面来解释一下这些命令的意思
找到需要格式化的文件
pre-commit hook应该是一段很快就能执行的程序。所以,最好不要格式化整个仓库。 一般地,只需要格式化除了删除的文件之外所有更改的文件。另外也可以结合项目实际,进行过滤。
这行命令找出除了删除的文件之外所有更改的.py文件,然后以空格隔开它们的路径。
git diff --cached --name-only --diff-filter=d | grep ".py$" | tr '\n' ' ')
格式化
这个根据自己项目实际来配置就行了。比如我用的是black。 另外,格式化之后,还要git add以下,否则commit里的是格式化前的结果。
总结
以上只是一个想法。等我做新项目的时候,得尝试一下。