我有一些在自定义硬件上运行的项目。 现在硬件已经改变,这需要一些软件更改。 因此,“旧硬件”有源A,“新硬件”有源B,95%相同。
如果将来添加新功能,则必须为两个版本执行此功能。换句话说,A和B将并排存在,从现在开始将始终需要相同的变化。
我刚刚开始使用Subversion,因此我不太熟悉所有可能性。
根据我的理解,B的新分支会将这两个分开,这不是我需要的。
维护A和B的最佳方法是什么,以便将来的更改适用于这两个版本,而无需手动应用它们两次?
答案 0 :(得分:9)
我认为不需要任何复杂的版本控制。只需将您的资源组织成如下结构:
Project
|-CommonSource95%
|-HardwareA
|-HardwareB
使用makefile或#ifdefs自定义特定硬件的代码。
答案 1 :(得分:3)
如果可能,我会维护一个源树并使用#ifdefs来自定义特定处理器的代码(假设您使用的是C或C ++)。如果您可以将与硬件相关的部分隔离到少量文件中,则此功能尤其有用。如果你能做到这一点,就不需要额外的颠覆魔法。
答案 2 :(得分:1)
以某种方式隔离特定于某个硬件版本的代码:将其放入不同的函数或使用宏来交换不同的部分。这就是高级操作系统称之为“设备驱动程序”的原因。
在构建文件中或在运行时,确定所需的版本并将其激活。函数指针是你的朋友。
将公共代码考虑在内并从两个版本中使用它。这样,您减少了代码重复,您可以同时看到两个版本。如果您使用SVN修订版将其分开,则无法实现此目的。
答案 3 :(得分:0)
在SVN中,您可以为“旧”和“新”硬件创建分支。
答案 4 :(得分:0)
我不会通过你的版本控制系统中的分支来解决这个问题。分支可能会分散到难以在它们之间移动变化的点。
这个问题让我想起了Apache Portable Runtime项目。您可以对代码使用相同的想法:隐藏Hardware Abstraction Layer后面的不同硬件的实现差异。该层的不同实现可以在同一主干中彼此相邻。大多数代码不应该关心硬件并通过HAL访问它。