如何在预提交的钩子中添加clang格式?

时间:2019-05-03 08:09:49

标签: git clang githooks pre-commit-hook

我是刚提交钩子以及Clang格式的新手,并且正在尝试将两者集成在一起。我已经设置了预提交钩子,并且知道如何在命令行上运行Clang格式,但是不确定如何将其添加到文件中。

这是我在命令行中运行的用于格式化的代码: clang-format -i -style=llvm fileName

我还试图在准备提交的所有文件上运行此文件。 git diff --cached --name-only

这是我的pre-commit文件:

hook_enabled=true

# Redirect output to stderr.
exec 1>&2

# If the hook is enabled and there are one or more files added to the commit run
# code formatting.
if [ "$hook_enabled" != "false" ] &&
    test $(git diff --cached --name-only $against | wc -c) != 0
then
    cat <<\EOF
  Code formatting changed some files, please review and re-add files with git add
EOF
    exit 1

我还将clang格式添加到package.json

    "pre-commit": "check-clang-format",
    "format": "git-clang-format",

请帮助我集成clang格式。

3 个答案:

答案 0 :(得分:1)

我将以下内容添加到REPO_ROOT/.git/hooks/pre-commit文件的顶部:

for FILE in $(git diff --cached --name-only)
do
        clang-format -i $FILE
done

.clang-format文件放置在REPO_ROOT中。

原始问题的另一个答案和第一条评论并未说明为什么最好避免使用此解决方案,因此,我很高兴听到更多有关此问题的信息。

答案 1 :(得分:0)

实际上,您不会在预提交钩子上调用clang格式的二进制文件。

以下是有关如何在预提交挂钩中设置clang格式的说明:https://github.com/andrewseidl/githook-clang-format

让我知道是否还不够,我将扩大答案。

答案 2 :(得分:0)

另一种选项(不是预先提交,但也可以用于提交)是运行git clang-format HEAD~1 <whatever options>。这将仅影响由最新提交更改的行。它会进行适当的更改,因此在这种情况下不需要-i。