我们应该将 built_value 生成的代码提交给 git 吗?

Should we commit built_value generated code to git?

built_value 生成 .g.dart 代码,但是文档没有给出任何提示我们是否应该将它们添加到我们的 git 存储库中。

我认为我们应该这样做,这样克隆我们的存储库的开发人员就可以启动 运行,而不必重新生成代码...但是有些人说生成的代码永远不应该提交,那么,建议是什么built_value?

如果您正在构建一个您希望被其他包和应用程序重用的库包,那么您应该提交它。

代码生成无法在依赖项中生成代码,pub publish 忽略 .gitignored 个文件。您将发布无效的包。 git-依赖项在这种情况下也不起作用。

有些包仅在应用程序项目中生成代码,也为从依赖项导入的代码生成代码,例如 reflectable。在这种情况下,您不需要提交生成的代码。

即使在应用程序项目中,我也总是提交此类生成的代码。这些文件具有特定的扩展名,例如 .g.dart,可以将其排除在代码审查之外,以免造成噪音或类似情况。

TLDR: 如果你将生成的文件添加到你的 git 提交中,然后遇到任何问题,你需要做的就是 运行 build_runner 和标志 --delete-conflicting-outputs

flutter packages pub run build_runner build --delete-conflicting-outputs

将生成的文件添加到 Git 提交的问题以及如何处理它们

提到的 build_runner documentation 关于不将生成的文件添加到 git 提交的观点不是一个好观点。稍后我会说为什么。

每次执行拉取请求时,不必 运行 build_runner 添加生成的文件,也不必处理不将它们添加到 git 提交的问题.

但是如果您决定将生成的代码添加到您的 git 提交中会怎样?以及如何轻松解决它们。

第一个问题是您可能会在生成的文件中遇到合并冲突。现在你如何处理这个。 你不会。此时你只需解决源文件中的冲突(如果有的话),然后 运行 build_runner 生成的文件将再次生成。

另一个问题是builder_runner docs中提到的问题。这是当你 运行 build_runner 并且它给你这个错误

C:\workspace\flutter\projects> flutter pub run build_runner build
[INFO] Generating build script...
[INFO] Generating build script completed, took 336ms

[WARNING] Deleted previous snapshot due to missing asset graph.
[INFO] Creating build script snapshot......
[INFO] Creating build script snapshot... completed, took 12.5s

[INFO] Initializing inputs
[INFO] Building new asset graph...
[INFO] Building new asset graph completed, took 787ms

[INFO] Checking for unexpected pre-existing outputs....
[INFO] Found 13 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository.
[SEVERE] Conflicting outputs were detected and the build is unable to prompt for permission to remove them. These outputs must be removed manually or the build can be run with `--delete-conflicting-outputs`. The outputs are: lib/models/advisory-service-item.g.dart


当 运行 宁 build_runner 时,您可以轻松解决购买添加 --delete-conflicting-outputs 标志。就像我们已经做过很多次一样

flutter packages pub run build_runner build --delete-conflicting-outputs