Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 维护满足平台两个版本的项目的正确方法是什么?_Git_Language Agnostic - Fatal编程技术网

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的目的是:-)