提交到GIT之前的代码格式化

8gsdolmq  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(476)

根据我的理解,当两个开发者在同一个项目上工作,但是使用不同的编码风格时,GIT中没有内置的方法来统一提交的源代码。如果我错了,请纠正我。
我是否应该要求所有开发人员使用相同的样式来格式化代码?
我可以让GIT按照同样的风格格式化代码吗?有没有可能用BitBucket实现自动代码格式化?

ds97pgxw

ds97pgxw1#

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

bttbmeg0

bttbmeg02#

您可以在每个开发人员的机器上安装一个pre-commit-hook,并运行您选择的一个linter,如果源代码不符合团队标准,它将阻止开发人员提交。
缺点是,开发人员可以通过简单地不在本地安装钩子来击败这种机制。
因此,另外,linter应该作为构建过程的一部分运行,如果代码格式不正确,则会使构建失败。

scyqe7ek

scyqe7ek3#

我是否应该要求所有开发人员使用相同的样式来格式化代码?
是的,可能有几种工具可以帮助你做到这一点。
一些编辑器和环境支持一种名为.editorconfig的文件格式,您可以在其中指定编码样式。例如,制表符或空格,如果是空格,一个代码缩进多少个空格。https://editorconfig.org/
我在visual studio中使用这个,在it works very well中。其他环境或编辑器可能需要你在支持它之前添加一个插件(比如visual代码),或者在项目中有自己定义代码样式的方式。
我可以让GIT按照同样的风格格式化代码吗?有没有可能用BitBucket实现自动代码格式化?
如果你想强制执行一种代码风格,而不仅仅是同意它(.editorconfig),那么你可能需要研究一下git钩子。
我个人对它们没有任何经验,但给出的一个例子是“强制执行项目编码标准”,所以你可能想研究一下它们。
https://githooks.com/

tv6aics1

tv6aics14#

据我所知,BitBucket没有这个功能。
但我认为找到一个共同的风格是一个好主意,以便提供快速的交换。
为此,有时候使用集成了格式化功能的IDE并共享设置是很有用的,如果可能的话。我认为Eclipse是一个很好的解决方案,因为它支持很多语言。
在我的团队中,我们使用的是MS Visual Studio和Allmann Style,因为它本身就受自动格式的支持。

e0bqpujr

e0bqpujr5#

当所有开发人员都在使用VS代码时,您可以将配置添加到存储库中,以便在每次保存时应用格式。
这需要安装一个格式化程序,它可以是一个扩展,如Pretier。

  • .vscode/设置.json*
{
    "editor.formatOnSave": true
}

为了确保每个人都有一个可用的格式化程序,你可以使用devcontainer,这里可以列出要安装的扩展,当团队中的任何人打开devcontainer时,扩展就会被安装。

  • .开发容器.json* 或 .开发容器/开发容器.json
{
  // …
  "customizations": {
    "vscode": {
      "settings": {
        "editor.formatOnSave": true
      },
      "extensions": [
        "esbenp.prettier-vscode"
      ]
    }
  }
}

后一种方法要求安装devcontainer扩展并且Docker可用。
请注意,这些设置将覆盖VS代码中的用户设置,在工作区或devcontainer中工作时,这些设置将先于自定义用户设置应用。

相关问题