我是GitHub的新手,我的小组之一的软件项目正在开发与自定义硬件设置的接口。每个硬件设置都需要有不同版本的代码库,但我不太确定使用GitHub执行此操作的最佳方法。我可以为每个不同的设置创建一个分支,但这意味着它们最终将合并回主设备。有没有其他人遇到这个,或者知道处理这个问题的最佳方法?
答案 0 :(得分:2)
我认为这与Git / GitHub无关,因为它不应该与特定版本控制系统绑定。我宁愿从项目设置角度看这个。
如果我正确理解了您的问题,那么您构建的系统具有一些应在不同类型的平台上运行的核心功能。每个目标平台都将运行不同的二进制文件。此二进制文件将包含在此目标平台上运行所需的核心功能和特性。
通常,人们倾向于使用分支来创建新功能或修复错误。在多平台上下文中,应该在所有目标平台上测试和部署这些错误修正和新功能。
此类项目的一个非常好的示例是 libgit2 ,它是Git核心方法的100%跨平台纯C实现。
此库可在Windows,Linux,MacOSX,Amiga上运行......并且每个平台都有特定要求(不同的64位数据模型,与文件系统,网络等交互的不同API)。 / p>
对于每个平台需要特定代码的每个区域,项目定义了核心功能与之交互的一些接口。然后,在不同的源文件中为每个平台实现这些接口。在构建时,根据所选目标平台将特定源文件与核心文件一起打包。
为了实现这一目标,该项目依赖于 CMake ,它能够构建一个VisualStudio项目(当定位Windows时)或gcc(或clang)项目(用于* nix中)。 CMake的工作方式是应用 CMakeList.txt 文件中描述的项目“配方”,该文件描述要包含的文件,要定义的编译器宏,......
除此之外,为了确保一切正常,项目挂钩在Continuous Integration服务器上,该服务器构建二进制文件并在每个不同的目标配置上运行测试。在GitHub上工作时,Travis CI(免费开源项目)是一个不错的选择(TeamCity也很好地集成)。配置它以在分支的所有(或子集)上自动构建和运行测试非常容易。此外,每个Pull请求也会自动进行测试!
FWIW,这个优点不仅限于C.例如, LibGit2Sharp ,libgit2的Mono / .Net绑定使用类似的概念,并利用Travis和TeamCity来确保所有测试在Debug和Release版本中传递.Net / Win32,.Net / Win64和Mono / Linux。
总结:
获取更多灵感的一些资源:
答案 1 :(得分:0)
我不知道处理这种情况的“最佳”方法,但我可能会有一个分支,例如core
,其中完成所有非平台特定的工作,然后是每个平台的其他分支。平台分支必须定期合并core
以获得新功能,但它们永远不会合并为任何东西。您也可以使用整个存储库而不是分支来实现这一点 - 一个完全通用的核心存储库,以及从核心获取但从不推回的每个平台的特定单独存储库。