protocol-buffers - 只将 .proto Protocol Buffer 文件放在存储库中?

标签 protocol-buffers grpc

我想知道关于源存储库(例如 git)的 Protocol Buffer 的最佳实践是什么:

我是否必须只将 .proto 文件放在存储库中,并让其他使用源代码的人使用 protoc 编译器重新生成类代码?还是同时放置 .proto 文件和 protoc 编译器生成的源代码是最佳实践?

最佳答案

如果可以避免,则永远不要 checkin 生成的代码。

如果您 checkin 生成的代码,您将承担多种风险,例如:

  • 您可能会失去如何正确重新生成该代码的知识。如果它没有作为构建的一部分自动化,那么很容易忘记记录,或者文档是错误的。
  • 您冒着生成的代码与架构不同步的风险。例如,有人可以更改 .proto文件但忘记更新生成的代码。他们的更改实际上不会“生效”,直到其他人稍后出于其他原因重新生成生成的代码——然后突然间他们看到了他们没有预料到的副作用。
  • 您生成的代码可能用于与构建器安装的不同版本的 Protocol Buffer 。在这种情况下,它将无法正常工作,因为必须使用完全相同版本的编译器和运行时库。

  • 如果由于某种原因你绝对必须 checkin 生成的代码,我强烈建议创建一个自动化测试来检查 checkin 的代码是否与 protoc 匹配。如果新鲜运行会生成。 (例如,protobuf 存储库本身包含为 descriptor.proto 生成的代码的 checkin 副本,因为编译 protoc 需要此代码,从而创建循环依赖。但是有一个单元测试可以检查 checkin 的代码匹配 protoc 将生成的内容。)

    关于protocol-buffers - 只将 .proto Protocol Buffer 文件放在存储库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41186798/

    相关文章:

    java - 在 Java 和 C++ 应用程序中使用 protobuf 进行解析时出错

    dart - 自动生成protobuf注释的类

    javascript - 如何从 stub 函数获取返回值?

    c++ - proto c++ 实现 - "marked ‘override’,但不会覆盖“错误

    go - 如何将元数据从 grpc-gateway 发送到 grpc 服务器?

    ajax - 如何使用 Protocol Buffer 序列化 Go 结构并在 Dart over Ajax 中使用它们

    python-3.x - Protobuf 和 Python : How to add messages to "repeatable Any" field?

    grpc - 请澄清 gRPC 取消语义

    go - grpc中可以传输context的内容吗?

    c++ - protobuf C++ 生成 Message 而不是 MessageLite