我想知道关于源存储库(例如git)的协议缓冲区的最佳实践是什么:
我是否必须将.proto文件放在存储库中,并让使用源代码的其他任何人使用protoc编译器重新生成类代码?或者将两个.proto文件和protoc编译器生成的源代码放在一起是最好的实践吗?
答案 0 :(得分:4)
如果可以避免,请不要签入生成的代码。
如果您签入生成的代码,则会承担多种风险,例如:
.proto
文件进行更改,但忘记更新生成的代码。他们的改变实际上并没有生效。#34;直到其他人后来因某些其他原因重新生成生成的代码 - 然后他们突然发现他们没有预料到的副作用。如果由于某种原因您绝对必须签入生成的代码,我强烈建议您创建一个自动化测试,以检查签入的代码是否与protoc
生成的代码匹配。 (例如,protobuf存储库本身包含descriptor.proto
生成代码的签入副本,因为编译protoc
需要此代码,从而创建循环依赖。但是有一个单元测试可以检查签入的代码与protoc
将生成的内容相匹配。)
答案 1 :(得分:1)
如果您的项目通常以其源代码形式使用(例如,每个用户都应该自己编译的库或程序),我会提供包含生成文件的发布包。
但我不会直接将生成的文件放入存储库。如果大多数用户使用已编译的二进制文件,那么提供易于编译的源代码包并不重要。然后protobuf生成器变成另一个构建依赖项。