我想知道关于源存储库(例如git)的协议缓冲区的最佳实践是什么: 我是否必须将.proto文件放在存储库中,并让使用源代码的其他任何人使用protoc编译器重新生成类代码?或者将两个.prot
我是否必须将.proto文件放在存储库中,并让使用源代码的其他任何人使用protoc编译器重新生成类代码?或者将两个.proto文件和protoc编译器生成的源代码放在最佳实践中?
如果可以避免,请不要签入生成的代码.如果您签入生成的代码,则会承担多种风险,例如:
>您可能会失去如何正确重新生成该代码的知识.如果它不是作为构建的一部分自动化的,那么很容易忘记记录,或者文档是错误的.
>您冒生成的代码与架构失去同步的风险.例如,有人可以对.proto文件进行更改,但忘记更新生成的代码.他们的更改实际上不会“生效”,直到其他人后来因某些其他原因重新生成生成的代码 – 然后他们突然看到他们没有预料到的副作用.
>生成的代码可能适用于与构建器安装的协议缓冲区不同的协议缓冲区版本.在这种情况下,它将无法正常工作,因为必须使用完全相同版本的编译器和运行时库.
如果由于某种原因你绝对必须检查生成的代码,我强烈建议创建一个自动化测试,检查签入的代码是否与protoc在新鲜运行时生成的内容相匹配. (例如,protobuf存储库本身包含descriptor.proto生成代码的签入副本,因为编译protoc需要此代码,创建循环依赖.但是有一个单元测试可以检查签入的代码是否匹配protoc会产生.)