如何使用Git在开发和生产环境中分发thrift生成的代码


How to distribute Thrift-generated code in development and production environments with Git?

如何使用Git (PHP, Python等)管理存储库和部署例程中生成的源代码文件?

例如,我有一个名为"interfaces"的存储库,其中包含Thrift定义。它们可以转换为Python, PHP, JS等框架/存根。使用不同语言的其他项目(每个项目都在自己的存储库中)希望使用这些存根。如何将存根交付给项目?

我只看到两种方法:

  1. 生成存根文件并将其存储在"interfaces"存储库中,该存储库应该附加到项目的存储库中(作为只读子模块或任何其他方式)。但是由于过于复杂的"git子模块"概念,这种方式在检查接口更新和存根时引入了很多令人头疼的问题。

  2. 将纯"接口"存储库附加到每个项目,并生成存根文件作为临时的git可忽略(!)文件(带有"make存根"或类似的文件)。这样,每个项目都可以有自己的生成设置和应用自己的补丁(如果需要的话)。但是你需要在PHP/Python开发和生产环境中引入一些编译命令(不仅仅是"git pull")。

这些方法的优缺点是什么?

通常最好选择"生成"路径而不是"存储生成内容"路径,主要是因为您并不总是100%确定所述生成内容的当前状态:它是否与源同步?

post-receive hook可以在push上负责生成相关内容。
参见Git Hooks或Pro-Git Hooks。
但是,在您自己的本地实例上(例如,在git pull上),别名可能将提取和生成所述内容结合起来。

我认为#2是最好的方法,因为你不想让git自动合并生成的文件。

在你的php或python应用程序初始化代码中,你可以检查idl文件和生成的存根上的时间戳,并发出警告和/或中止,或者启动thrift编译器(如果可用)