我应该将Flutter / Dart中生成的代码提交到VCS吗

时间:2019-05-13 10:22:22

标签: git dart flutter code-generation

我为Flutter使用了Retrofit(https://pub.dev/packages/retrofit)和Json Serializable(https://pub.dev/packages/json_serializable)库,它们都创建了生成的代码文件,这些文件最终出现在其余的源代码中。生成的x.g.dart文件是否应该在VCS中提交?

在正常的Android / Java开发中,生成的文件进入您不提交的特殊gen / out / build文件夹中,并且IDE通常非常擅长隐藏这些文件。但是由于Flutter会在源代码中生成它们,所以我不确定该如何处理。

4 个答案:

答案 0 :(得分:2)

如果您是在自己的CI上构建应用程序,并且没有将其作为程序包发布(在github上),我不会提交它们,而只会在发布期间每次在CI上生成它们。 您真的不想解决生成代码上的冲突。

答案 1 :(得分:1)

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 commits。

但是如果您决定将生成的代码添加到您的 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 

因此,对于您运行上述命令的任一问题,就是这样

答案 2 :(得分:-1)

有必要提交生成的文件。如果我们未提交和提供支持,那么我们将使用Jenkins,则由于缺少零件文件,构建将不会生成。

答案 3 :(得分:-1)

一般最好不要提交生成的文件。正如 build_runner 本身所推荐的那样。这是包的源代码控制部分的 link

此外,它还提到了需要考虑的两件事。

  1. 如果这些建议不同,则特定构建者的建议应取代这些建议。
  2. 在某些情况下,生成的文件可能会导致“已存在”警告。我自己已经多次看到这种情况。