C++:使用 git 的 clang 格式

C++: clang-format with git

我通常工作的项目今天在我尝试在新分支中提交时出现以下错误:

Traceback (most recent call last):
  File ".git/hooks/pre-commit", line 86, in <module>
    clang_format(f)
  File ".git/hooks/pre-commit", line 41, in clang_format
    action = raw_input('{} does not conform to clang-format rules. '
NameError: name 'raw_input' is not defined

知道如何解决这个问题吗?至少让我的代码提交。谢谢!

您可以暂时禁用预提交挂钩以保护您的更改,然后再尝试了解系统上发生的事情。

使用 --no-verify 标志提交,或者如果需要多次提交则禁用钩子。

绕过提交的挂钩

git commit --no-verify

绕过所有提交的钩子

在您的 git 项目的根目录下,执行:

chmod -x .git/hooks/pre-commit

这会禁用调用烦人的 python 脚本的挂钩,让您无需任何检查即可提交您想要的任何内容。但是请注意,不执行任何检查

正如评论中提到的几个人,很明显这里发生的是 Python-2.x 脚本正在被 Python-3.x 解释口译员。

同时安装了 Python 两种版本的系统有时会使用名称 python2 来调用 Python 2.x 解释器,并使用 python3 来调用 Python 3.y 解释器。 (这里 xy 的值可能会有所不同,尽管现在没有人应该使用早于 Python 2.7 和 it's a good idea to move to Python 3 soon 的任何东西。)

将 Python 2 脚本转换为 Python 3 通常很容易,但是如果您安装了两个解释器,并且您的脚本本身只是简单地读取:

#! /usr/bin/env python
... script ...

使用 Python 2 的最快方法,如果它仍在您的系统上,名称为 python2,则将第一行更改为:

#! /usr/bin/env python2

第一行可能有所不同,但总体思路是 #! 后跟解释器的完整路径名,然后是该解释器的任何参数。使用 /usr/bin/env 作为解释器允许进一步的路径搜索,这样你就可以让它找到 pythonpython2python3python3.6python3.7,等等,视情况而定。

作为,从Git这边,你可以跳过整个预提交脚本。