假设我有一个项目 IMClient-MacOS 和 IMClient-Windows 的两个分支,并且它们的代码仅相差(假设)一个目录 main/。所有其他目录都包含独立于系统的代码并且可以互换。
有些工人在 Windows 版本上工作,有些在 MacOS 版本上工作。当他们从对应的分支合并时,他们如何防止覆盖更改到 main/ 目录?有没有一种方法可以在 Git 中合并始终忽略依赖于操作系统的目录?
您可能可以git
使用. 还是我忽略了让来自不同系统的代码共享一个目录的充分理由?
不要每个平台(windows 和 mac)只使用一个分支。
相反,至少要有三个分支:Generic、windows 和 mac。通用分支没有任何系统相关代码,平台分支没有任何通用代码,因此没有一个分支将自行构建。相反,mac 开发人员总是创建一个一次性分支,该分支是 generic 和 mac 之间的合并,以便构建。
然后,开发通用功能并将其提交到通用分支,并在平台分支上使用相关的平台支持代码。
更好的是有一个单一的代码库,构建系统可以在两个平台上构建(makefile 变量和条件编译)。然后一个mac开发者会为新特性添加一个通用特性和平台支持代码,只针对mac,同时为其他平台添加一个非工作存根,并将结果交给其他平台的开发者填写存根。
尝试过滤合并的另一种方法是将通用部分和特定于操作系统的部分拆分为两个存储库。然后,您可以将一个设置为另一个的子模块。是否将公共部分设置为操作系统特定部分的子模块,或者其他方式可能取决于大多数提交的去向。
有一个选项可以忽略整个文件或目录结构,但是这些文件根本不会被添加到 repo 中。我想你已经知道了,通过使用.gitignore
文件
正如你所说,我认为为 Windows 和 OS X 的代码有一个单独的分支。然后,您将通过cherry-picking
来自其他分支的代码合并更改(语法为git cherry-pick refspec
)但是,这些开发人员应始终注意其他操作系统分支上的“更改”。
我还建议始终对 中的文件进行单独的提交main
,这样在您挑选分支时就不会混淆。