【问题标题】:Git - Independent Branches or Different repos for instances of the same program with slightly different useGit - 相同程序实例的独立分支或不同存储库,用途略有不同
【发布时间】:2012-04-26 22:27:51
【问题描述】:

我最近开始使用 git 并有一个问题。我有一个程序的两个分支,一个使用算法 A,一个使用算法 B。这些算法以不同的方式做同样的事情。现在,对于这两个分支中的每一个,我都想为不同类型的数据创建不同的程序实例(这些实例最多可以是 50 个不同的实例)。在您问之前,由于复杂性和性能问题,我无法将它们全部合并到同一个程序中。

此外,如果可能的话,我希望能够修改核心(即在所有实例之间共享的源部分)和所有要随更改更新的实例。

你会推荐什么方法来实现这个目标?

PS:由于我的问题可能不是很清楚,请随时询问任何其他信息。

【问题讨论】:

    标签: git branch organization project-organization


    【解决方案1】:

    如果他们以不同的方式做同样的事情,请尝试使他们符合通用接口/API。如果你能做到这一点,那么应用桥接模式这两个实现可以只存在于不同的子目录中。你真的不需要 git 或分支来管理这个——只需在 Bridge 后面有两个不同的实现,并在运行时(或编译时,因为你似乎更喜欢编译时方法)选择正确的 impl。

    【讨论】:

    • 嘿,我喜欢你的想法。我正在用 C 语言编写,并为不同的程序用途制作了不同的头文件。我唯一担心的是它看起来有点乱,因为我必须将函数定义放在这些头文件中才能使它们内联。
    • 在没有真正看到你在做什么的情况下,我会制作一个头文件并有不同的 .c(以及,因此,.o)文件,这些文件会根据你正在尝试的工作进行链接完成。那将用于编译时桥接实现。对于运行时桥,将有一个精简的 API 通用实现,它可以简单地将调用转发/委托给在运行时切换的实际实现。
    • 是的,那是我的计划,但inline 要求该函数在使用时在同一个翻译单元中定义,所以我必须在头文件中定义它们,然后是 .c文件没有更多用处。当然我还没有检查过inline指令提供了什么样的性能改进,如果有的话!
    • "inline" 只是对编译器的建议;编译器可以随意忽略该建议。因此,我更喜欢编写由健全的架构支持的干净、可维护的代码。这并不是说在设计时没有优化空间,而是在设计时发生的优化类型通常与算法选择或数据结构选择有关,与代码体是否内联或具有功能无关调用开销。
    • 如果您想要内联某些内容的原因是因为它在关键路径上的紧密循环中被调用,那么请考虑将循环移动到桥实现内部而不是桥实现之外。
    【解决方案2】:

    您可以拥有一个带有核心代码的 master 分支和两个带有 alg 和 alg B 的其他分支,这样您就可以将 master 合并到您的算法分支。这样,您可以拥有两个不同的程序,它们具有不同的算法但具有相同的核心。我真的不明白你所说的实例是什么意思

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      相关资源
      最近更新 更多