【问题标题】:How to format the code on Git Push and Pull如何在 Git Push 和 Pull 上格式化代码
【发布时间】:2022-12-05 01:06:35
【问题描述】:

我目前正在与不同的开发人员一起使用不同的语言(TS、TSX)进行开发项目。 此外,我们使用 Prettier/ESLint,但这是一个细节。

而有些开发者习惯用2个缩进进行开发,并且使用空格。 还有一些使用 4 缩进,并且更喜欢制表符。

问题是,当我们从 github 获取代码时,缩进可能是另一个开发人员的缩进,因此不是我们对应的缩进。 当开发人员检索此缩进为 2 的代码时,正在使用 4 缩进,整个文件被检测为已被 git 修改。

是否可以在克隆/拉取/获取时执行代码格式以匹配我们的偏好? 在创建拉取请求/推送/提交时,格式化代码以使其与存储库中存在的代码相对应?

我们尝试了几种方法来解决这个问题但没有成功:

【问题讨论】:

  • 用户 .editorconfig 并提交挂钩。 Editorconfig 将使用设置配置编辑器,覆盖用户设置并且挂钩将强制执行它。本地挂钩可以被用户覆盖——所以如果你想真正执行它,你需要在不遵守编码规则的情况下拒绝推送。
  • 伙计,在这种情况下,我会坚持让每个人聚在一起,对一项公约进行投票,然后强制只使用该公约。当他们在不同的项目上工作时,这是一回事,但当他们在同一个项目上工作时,开发人员应该愿意达成共识!
  • 我在理论上同意,但在实践中,缩进看起来并不漂亮。这尤其适用于有身体问题的人。就个人而言,作为 2 缩进,我看不到哪个括号关闭了哪一行。

标签: git visual-studio-code tabs indentation prettier


【解决方案1】:

推送和获取不是可以格式化代码的点,因为 Git 只是推送或获取已经存在的数据。除了对其进行去化和压缩之外,它实际上不会以任何方式更改发送的数据。

然而,大多数组织这样做的方式是建立一套代码标准和一个 lint 工具来执行它们。例如,在 Rust 中,您可能会使用 4 个空格和 rustfmt 来格式化代码。然后,您将 CI 设置为运行 linter 或样式检查,如果不正确则失败。因此,如果代码不符合代码风格,则无法合并。

虽然欢迎每个人对如何格式化代码有自己的偏好,但当你们在一个项目上一起工作时,要求每个人就一套标准达成一致是完全正常和合理的。不是每个人都必须喜欢它:Go 团队明确同意标准的 Go 风格不是任何人的最爱,但它是一个固定的标准,每个人都遵守它。我本人严格执行代码样式更改,这与我喜欢的样式不同,仅仅是因为每个人都使用相同的样式更为重要。

如果你有一个自动格式化代码的工具,这会变得容易得多,因为这样每个人都只需运行该工具,它就可以自动检查,而根本不需要在代码审查中考虑它。它要么通过 CI,要么不通过。

请注意,如果需要,您可以提供预提交挂钩,但您不应该要求它们,因为它对用户在高级工作流中创建格式不正确的临时提交很有用。由于the Git FAQ mentions that hooks on the developer machine are not an effective control,你无论如何都需要设置 CI。

【讨论】:

    【解决方案2】:

    您可能会发现 this article 有帮助;作者展示了如何使用带有本地预提交工作流(或挂钩)的 clang-format 以及 PR 操作来强制执行代码样式。

    至少,.editorconfig 文件是个好主意,只要团队成员在进行更改后明智地运行简单的自动格式化,缩进样式和空格就不会成为问题。对我来说,运行自动格式快捷方式很快就像 CTRL+S 一样习惯了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 2012-09-07
      • 2012-07-02
      • 2015-12-26
      • 2018-02-06
      • 2017-03-09
      • 2014-03-09
      • 2018-07-05
      相关资源
      最近更新 更多