Git 我们应该将 built_value 生成的代码提交到 Git 吗
在本文中,我们将介绍在使用 Git 的项目中是否应该提交由 built_value 生成的代码的讨论。built_value 是一个用于生成不可变数据类(immutable data class)的库,它可以为我们自动创建 getter、setter、equals、hashCode 等代码。那么,我们应该将这些生成的代码提交到 Git 历史记录中吗?让我们一起来探讨一下。
阅读更多:Git 教程
为什么不提交生成的代码?
有一些理由可以支持我们不将由 built_value 生成的代码提交到 Git 中:
1. 代码生成不可避免地会导致冲突
在多人协作的项目中,每个人在自己的本地环境中都会独立生成代码。由于生成的代码可能会更改文件的结构和内容,因此在将这些生成的代码合并到主分支时,很容易发生冲突。这会增加解决冲突的工作量,特别是在每次生成代码后都需要手动解决冲突。
2. 让 Git 历史记录保持简洁和可读性
Git 历史记录对于项目的维护和追踪非常重要。将生成的代码提交到历史记录中会导致该记录变得混乱,因为它们只是由生成器自动生成的代码。这使得查看和追踪真正重要的更改变得更加困难。同时,我们可能希望使用 Git 的 diff 功能查看代码更改,而不受到由生成的代码引起的干扰。
3. 避免重复提交相同的代码
由于生成的代码是根据模板和输入值生成的,因此每次生成的代码都将是相同的。将这些相同的代码重复提交到 Git 中浪费了存储空间,并增加了仓库的大小。相反,我们可以在代码仓库中只保留模板和输入值,并在需要时在开发环境中生成所需的代码。
为什么提交生成的代码是有道理的?
然而,有时将生成的代码提交到 Git 中也是合理的:
1. 方便团队协作和代码审查
提交生成的代码可以确保项目的每个成员在更新代码时都能够获得最新的生成结果。这可以避免因为未及时更新生成的代码而导致的编译错误。此外,在代码审查过程中,也能够直观地看到所修改的代码相比于生成的代码有哪些变化,以更好地评估修改的正确性。
2. 简化新成员的入门过程
对于新加入项目的成员来说,能够拥有由生成的代码提供的完整项目结构和功能是非常有帮助的。新成员可以通过直接拉取整个代码仓库,而不需要进行生成步骤,从而节省时间和减少可能出错的环节。
案例分析:Flutter 项目中的 built_value 代码提交策略
在 Flutter 项目中使用 built_value 时,提交生成的代码的最佳实践是将其列入 .gitignore
文件并将其排除在 Git 版本控制之外。然而,我们可以在 pubspec.yaml
文件中定义一个脚本,以在开发环境中自动生成所需的代码。
dev_dependencies:
# 其他依赖项...
built_value_generator: // built_value 依赖项
build_runner: // 生成代码的构建运行器
# 定义生成代码的脚本
scripts:
generate_code:
command: flutter packages pub run build_runner build --delete-conflicting-outputs
description: Generate built_value code
通过这种方式,开发人员可以在需要时通过运行 flutter pub run
命令来生成所需的代码。这保持了 Git 历史记录的简洁性,同时又能够方便地生成所需的代码。
总结
在使用 Git 的项目中,是否应该将由 built_value 生成的代码提交到 Git 是一个有争议的问题。提交生成的代码可以方便团队协作、简化新成员的入门过程,但也会导致冲突、增加 Git 历史记录的复杂性和增加代码仓库的大小。最佳实践是将生成的代码排除在 Git 版本控制之外,但可以定义脚本在开发环境中生成所需的代码。通过合理选择提交策略,我们可以在项目中更好地利用 Git 版本控制系统。