提交到GIT前的代码格式化

22

据我理解,当两个开发人员在同一项目上工作但使用不同的编码风格时,GIT 中没有内置的方法来统一提交的源代码。如果我错了,请纠正我。

我应该要求所有开发人员使用相同的代码格式吗?

我能否要求 GIT 根据相同的风格对代码进行格式化?是否可以通过 BitBucket 实现自动代码格式化?


“我应该要求所有开发人员使用相同的代码格式吗?” 绝对是的。选择一份样式指南,并在项目中坚持使用它。如果进行代码审查,请将代码样式作为审查的一部分。如果有一种工具可以自动检查代码是否符合您所使用语言的某些标准,请使用它。 - Chris
6个回答

9
我应该要求所有开发人员使用相同的代码格式吗?
是的,这是个好主意。为了降低问题的发生率,项目通常有编码风格指南,这些指南可以从非常宽松到非常严格。这些指南包括但不限于布局和格式。
我与大多数开发人员一起工作时,他们都很乐意采用手头项目的风格,即使这不是他们个人的风格。这是为了更大的利益。它有助于可读性,并减少了将“格式修复”与实际更改混合在一起的机会。如果我编辑的代码没有指定的样式指南,我会尽可能遵循现有的样式。
你的开发人员最糟糕的做法是在提交之前通过自己的布局规则运行整个源文件的自动格式化程序。这可能会导致对其实际工作无关的地方进行广泛的更改,并且在您在多个分支中工作时必然会引起痛苦的合并冲突。
我能否要求 GIT 根据同一风格格式化代码?在 BitBucket 中可以实现自动代码格式化吗?
我要用质疑的方式回答这个问题:为什么要这么做?小心使用提交挂钩执行自动格式化或基于“不正确”风格拒绝提交。
这就是代码审查的用处,而在代码中总会有例外情况,人类做得更好(例如,在 C++ 领域中,clang-format 大多数情况下都做得很好,但在非平凡的初始化列表方面表现糟糕)。强制每个人接受机器的解释很可能只会妨碍工作。

2
不,这是个糟糕的想法。完美的解决方案还没有被设计出来(商业机会,伙计们),但理想的解决方案应该是一个双向格式化程序——当你检查某些东西时,它会按照你所需的设置进行格式化,当你将其归还时,它会将其设置为公司标准。显而易见的解决方案,没有涉及到代码纳粹主义。 - Rex the Strange

4
你可以在每个开发者的机器上安装一个 pre-commit-hook,并运行所选的代码检查工具,如果源代码不符合团队标准,则阻止开发者提交代码。缺点是开发者可以通过简单地不在本地安装 hook 来规避此机制。
因此,应将代码检查工具作为构建过程的一部分运行,并在代码格式不正确时使构建失败。

2
“我应该要求所有开发人员使用相同的代码格式吗?”
是的,有几个工具可以帮助您做到这一点。一些编辑器和环境支持一种名为.editorconfig的文件格式,您可以在其中指定编码样式,例如制表符或空格以及一个缩进所需的空格数。https://editorconfig.org/ 我在Visual Studio中使用它,效果非常好(点击此处)。其他环境或编辑器可能需要您添加插件才能支持它(如Visual Code),或者有自己的方式在项目中定义代码风格。
“我能否要求GIT按照相同的样式格式化代码?是否可以通过BitBucket实现自动代码格式化?”
如果您想强制执行代码样式而不仅仅是达成共识(.editorconfig),那么您可能需要查看git钩子。我个人没有任何经验,但其中给出的示例之一是“强制执行项目编码标准”,因此您可能需要研究一下。

https://githooks.com/


1
当所有开发人员都在使用VS Code时,您可以将配置添加到存储库中,在每次保存时应用格式设置。
这需要安装格式化程序,可以是像Prettier这样的扩展程序。
.vscode/settings.json
{
    "editor.formatOnSave": true
}

为了确保每个人都有可用的格式化程序,您可以使用devcontainers,扩展可以在此处列出以供安装,并且当团队中的任何人打开devcontainer时将被安装。
.devcontainer.json或.devcontainer/devcontainer.json
{
  // …
  "customizations": {
    "vscode": {
      "settings": {
        "editor.formatOnSave": true
      },
      "extensions": [
        "esbenp.prettier-vscode"
      ]
    }
  }
}

后一种方法需要安装 devcontainer 扩展和可用的 Docker。


请注意,这些设置将覆盖 VS Code 用户设置,在工作区或 devcontainer 中工作时,这些设置将优先应用于您的自定义用户设置之前。

1
据我所知,BitBucket不支持此功能。
但是我认为找到一个共同的风格是个好主意,以便提供快速交流。
为此,有时使用带有集成格式化功能的IDE并共享设置是很有用的,如果可能的话。我认为Eclipse是一个不错的解决方案,因为它支持很多语言。
在我们团队的情况下,我们正在使用MS Visual Studio和Allmann Style,因为它被自动格式化原生支持。

0
.vscode/settings.json { "editor.formatOnSave": true }
对我来说效果很好!!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接