如何保持略有不同的软件?

时间:2009-04-29 11:33:21

标签: svn version-control

我有一些在自定义硬件上运行的项目。 现在硬件已经改变,这需要一些软件更改。 因此,“旧硬件”有源A,“新硬件”有源B,95%相同。

如果将来添加新功能,则必须为两个版本执行此功能。换句话说,A和B将并排存在,从现在开始将始终需要相同的变化。

我刚刚开始使用Subversion,因此我不太熟悉所有可能性。

根据我的理解,B的新分支会将这两个分开,这不是我需要的。

维护A和B的最佳方法是什么,以便将来的更改适用于这两个版本,而无需手动应用它们两次?

5 个答案:

答案 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访问它。