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

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

我正在尝试将我的项目移植到另一个平台,但我发现这个新平台与我开始使用的平台之间存在一些差异。我已经看到了 autotools 包和配置脚本,它们应该有助于解决这个问题,但我想知道为每个新平台建立一个单独的分支是否可行。

我看到的唯一问题是如何在目标平台上进行开发,然后将更改 merge 到其他分支,而不获得依赖于平台的更改。如果有办法做到这一点,在我看来,它会干净得多。

有没有人这样做过并可以推荐/阻止这种方法?

最佳答案

我绝对不鼓励这种方法。

如果您将相同的代码保留在无法 merge 的分支中,您只是自找麻烦。跟踪哪些更改已应用到哪些分支将会非常令人困惑,如果您忘记将更改应用到某个平台分支,那将是一场噩梦。

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

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

将内容保留在一个分支中并忽略不适用于当前平台的内容,可以让您在主题分支和主分支之间来回 merge ,让您的生活更加理智。

关于c - 为每个平台维护一个单独的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473383/

相关文章:

git - 如何 git grep 主存储库及其所有子模块?

C++ 跨平台构建自动化

java - 我的 jar 可以在 Ubuntu 上运行,但不能在 Windows 上运行

c - 使用 openssl 的服务器程序在尝试连接 Linux 中的标准客户端时显示错误

c - Linux 中移动堆栈并保留一半可寻址空间

c - 将字符串转换为 double 等于文字 double 吗?

c - 在C中使用字符串数组

git - 如何在 Git Bash 中找到 Vim 的绝对路径?

git - 用于解决 git 中的 merge 冲突的控制台 UI 工具...类似于 vimdiff 但 'easier'

c - makefile 在 Windows 上适用于 cygwin,但不适用于 ubuntu