为每个平台维护一个单独的分支

时间:2012-07-13 15:18:26

标签: c git cross-platform branching-and-merging

我正在尝试将我的项目移植到另一个平台,我发现这个新平台与我开始的平台之间存在一些差异。我已经看过autotools包并配置了应该有帮助的脚本,但我想知道为每个新平台设置一个单独的分支是多么可行。

我看到的唯一问题是如何在目标平台上进行开发,然后将更改合并到其他分支,而不进行与平台相关的更改。如果有办法做到这一点,在我看来它会更清洁。

是否有人这样做可以推荐/劝阻这种方法?

2 个答案:

答案 0 :(得分:4)

我肯定会劝阻这种做法。

如果您在无法合并的分支中保留相同的代码,那么您只会遇到麻烦。如果您忘记将更改应用到您的某个平台分支机构,那么跟踪哪些更改已应用于哪些分支机构将会非常令人困惑。

您没有提及该语言,但使用该语言中提供的功能来区分平台之间的代码差异,但使用一个分支。例如,在C ++中,您应该首先使用基于文件的分离。例如,如果您有适用于Mac,Linux和Windows平台的声音代码,请创建一个sound_mac.cpp,sound_windows.cpp和sound_linux.cpp文件,每个文件包含相同的类和方法,但包含非常不同的特定于平台的实现。显然,您只需将适当的文件添加到特定平台上的IDE中。因此,您的Xcode项目获取sound_mac.cpp文件,而您的Visual Studio项目使用sound_windows.cpp文件。引用这些类和方法的文件将使用#ifdef来确定要包含的标头。

您将对安装程序脚本等内容使用类似的方法。 Mac上的安装程序可能与Windows上的安装程序不同,但两者的文件都位于分支机构中。 Mac上的构建脚本将仅使用特定于Mac的安装程序文件,并忽略特定于Windows的文件。

将事物保存在一个分支中并忽略不适用于当前平台的内容允许您在主题分支和主分支之间来回合并,使您的生活更加健全。

答案 1 :(得分:0)

分支以确定目标平台的兼容性是可行的。只需确保将与目标平台无关的更改专门分离到另一个分支中。