在GCS中保留gRPC定义和生成文件的策略

时间:2016-09-26 23:20:35

标签: version-control grpc

我想在由多个服务组成的系统中使用gRPC(每个服务都在自己的存储库中),我想知道在Git中进行版本控制的方法:

  • * .proto files
  • 生成的代码(主要是Go / Java / Python)

到目前为止,我一直在考虑这样的方法:

  • * .proto文件 - 或者:
    1. 每个定义都转到单独的存储库
    2. 每个定义都落在实现定义服务的服务存储库中
  • 生成的代码 - 以下之一:
    1. 进入与上面
    2. 中相同的存储库
    3. 进入与上面
    4. 中相同的存储库
    5. 根本没有生成代码 - 它是在实际构建之前由构建的系统/脚本生成的

我对gRPC没有太多经验,我很难分辨其中一个是否比其他更好/更差。我可以看到一些优点和缺点(如良好的IDE集成,不需要生成代码的应用程序等)但我想知道一些"大"潜在问题?哪种方法是"最佳实践"?

1 个答案:

答案 0 :(得分:2)

一般最佳做法是将生成的文件保留在存储库之外,并始终在构建时自动生成它们。例如,在编译Java程序时,不要将任何生成的.jar文件添加到源代码管理中;这是多余的,并要求在路上头痛。 protobuf文件也是如此。

可以想象,有用的将生成的文件保存在源代码控制中的场景(例如,作为单元测试的黄金文件),但这些是特殊情况,而不是一般情况下经验法则,可能需要更复杂的机器来确保生成的内容是最新的。

请注意,这与分发.proto文件生成的源略有不同。并非您的代码的每个用户都希望系统能够从源代码重建。通过类似的类比,您不一定将Java项目分发为原始代码,而是分发为.jar个文件。