我为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会在源代码中生成它们,所以我不确定该如何处理。
答案 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。
此外,它还提到了需要考虑的两件事。