Должны ли мы зафиксировать сгенерированный код build_value в git?

built_value генерирует .g.dart код, но документы не дают никаких подсказок, если мы должны добавить их в наш репозиторий git или нет.

Я думаю, что мы должны, чтобы разработчики, клонирующие наше хранилище, могли быть запущены, без необходимости перегенерировать код... Но некоторые люди говорят, что сгенерированный код никогда не должен быть зафиксирован, так что, какова рекомендация для built_value?

2 ответа

Решение

Если вы создаете библиотечный пакет, который хотите использовать в других пакетах и ​​приложениях, вам следует его зафиксировать.

Генерация кода не может генерировать код в зависимостях и pub publish игнорируемых .gitignoreд файлы. Вы бы опубликовали недействительные пакеты. Также git-зависимости не будут работать в таких случаях.

Существуют пакеты, которые генерируют код только в проекте приложения, также для кода, импортированного из зависимостей, например reflectable делает. В этом случае вам не нужно фиксировать сгенерированный код.

Я всегда фиксирую такой сгенерированный код даже в проектах приложений. Эти файлы имеют определенные расширения, такие как .g.dart это может быть исключено из проверки кода, чтобы не вызывать шум или подобное.

TL; DR: если вы добавляете сгенерированные файлы в свои коммиты git, а затем сталкиваетесь с любыми проблемами, все, что вам нужно сделать, это запустить с флагом

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

Проблемы с добавлением сгенерированных файлов в коммиты Git и как с ними бороться

упомянутый build_runner документыдокументациипункт о том, что сгенерированные файлы не добавляются в ваши коммиты git, - не лучший момент. что позже я скажу почему.

точка добавления сгенерированных файлов заключается в том, чтобы не запускать build_runner каждый раз, когда вы выполняете запрос на перенос, и не иметь дело с тем, чтобы не добавлять их в коммиты git.

но что произойдет, если вы решите добавить сгенерированный код в свои коммиты git? и как их легко решить.

Первая проблема заключается в том, что вы можете столкнуться с конфликтом слияния в сгенерированном файле. теперь как ты с этим справишься. ты этого не сделаешь . на этом этапе вы просто разрешаете конфликты в исходном файле (если они есть), а затем запускаете build_runner, и созданные файлы будут сгенерированы снова.

другая проблема - это то, что упомянуто в builder_runner . когда вы запускаете 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


что вы можете легко решить купить добавив --delete-conflicting-outputsфлаг при запуске build_runner. как мы это делаем уже много раз

      flutter packages pub run build_runner build --delete-conflicting-outputs 
Другие вопросы по тегам