Git 维护满足平台两个版本的项目的正确方法是什么?
假设我有一个用特定编程语言实现的项目,由于任何原因,该语言的使用被分成两个(或更多)版本 这两个版本提供了不同的机制来实现项目的某些功能。因此,相同的代码在不同版本之间是不可移植的Git 维护满足平台两个版本的项目的正确方法是什么?,git,language-agnostic,Git,Language Agnostic,假设我有一个用特定编程语言实现的项目,由于任何原因,该语言的使用被分成两个(或更多)版本 这两个版本提供了不同的机制来实现项目的某些功能。因此,相同的代码在不同版本之间是不可移植的 如何在git存储库中组织这种情况?但是,是否在分支中保留特定版本的目录?是否在同一存储库中复制分支?或者为每个版本使用不同的存储库?这取决于编程语言,但如果两个版本之间的差异导致代码存在显著差异,那么我希望: 定义一个接口,表示实现需要不同的功能 编写该接口的两个实现 根据语言和项目的不同,在构建时或运行时选择合适的
如何在git存储库中组织这种情况?但是,是否在分支中保留特定版本的目录?是否在同一存储库中复制分支?或者为每个版本使用不同的存储库?这取决于编程语言,但如果两个版本之间的差异导致代码存在显著差异,那么我希望:
#if NEW_PLATFORM
// enable useful new flag 2
#define FLAGS 0x11
#elif OLD_PLATFORM
// we can live without flag 2 if it's not supported
#define FLAGS 0x1
#else
#error what platform even is this?
#endif
但是请注意,随着代码的开发,细微的差异可能会增加,最终会导致平台检测代码混乱。您的目标应该是在最多一个地方测试平台,或者更好的是通过构建选项控制整个平台。在上述情况下,您可以调用
使用有用的新标志
,而不是显式地编码它取决于特定的平台版本。然后由构建配置决定哪些平台支持哪些功能。您可以通过分支实现这一点。在合并过程中,您需要确定它们之间可以更改和不能更改的内容
git merge --no-commit
将执行合并,但不执行最后的提交步骤。这允许您调查解决方案是否仍然有效。一旦工作正常,请使用完成合并
git merge
那里应该有默认消息。您可以保持原样,也可以添加有关如何保持此特定版本正常工作的更多信息。我觉得您应该将差异协调到一个版本中,该版本可以同时在这两个版本上工作。我希望解决一个无法通过代码解决的问题,而只能通过版本控制来解决。但是经过一点思考,也许你的解决方案会对我有用。谢谢大家!@博尔赫斯:公平地说,我不知道git通常是如何使用的,所以我提出了一种方法,如果您愿意,可以使用单个分支。大概Linux对其特定于平台的代码的管理有一个约定:如果git在其中扮演了角色,那么您可能应该复制它,因为根据定义,Linus使用git的目的是:-)