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