繁体   English   中英

如何在 Git 推拉上格式化代码

[英]How to format the code on Git Push and Pull

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

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

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

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

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

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

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

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

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

请注意,如果需要,您可以提供预提交挂钩,但您不应该要求它们,因为它对于用户在高级工作流程中创建格式不正确的临时提交很有用。 由于Git FAQ 提到开发者机器上的钩子不是一个有效的控件,所以无论如何你都需要设置 CI。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM