git中相同代码的两个变体:Branch、fork或make separate repository?

git中相同代码的两个变体:Branch、fork或make separate repository?,git,version-control,github,merge,branch,Git,Version Control,Github,Merge,Branch,我有以下两种(96文件)代码变体,它们之间的唯一区别在括号中: 双精度(每个变量定义为实*8,每个数字定义为1234D+02) 四倍精度(每个变量定义为实*16,每个数字定义为1234Q+02) 如果我更改了软件中的任何内容,我希望此更改在上述两种代码变体中保持一致。 在Git(集线器)中,我应该: 构建一个单独的存储库(如何轻松合并更改?) 构建一个不同的分支(但分支似乎最适合于所有代码合并时) 建造一个叉子(但这似乎是为那些不能推动主要分支的人准备的) 这里有一些相关的问题,但不是我想要的。

我有以下两种(96文件)代码变体,它们之间的唯一区别在括号中:

  • 双精度(每个变量定义为实*8,每个数字定义为1234D+02)
  • 四倍精度(每个变量定义为实*16,每个数字定义为1234Q+02)
  • 如果我更改了软件中的任何内容,我希望此更改在上述两种代码变体中保持一致。

    在Git(集线器)中,我应该:

  • 构建一个单独的存储库(如何轻松合并更改?)
  • 构建一个不同的分支(但分支似乎最适合于所有代码合并时)
  • 建造一个叉子(但这似乎是为那些不能推动主要分支的人准备的)
  • 这里有一些相关的问题,但不是我想要的。我已经写了为什么我没有接受他们的答案:

  • :Tobu的回答是“git cherry pick在很多情况下可能不起作用”
  • :建议git子模块,但没有
  • :建议使用#define,但是否有与FORTRAN等效的语言
  • :建议使用第三个分支来表示“通用”代码,但我不认为使用超过2个分支有什么好处。我不需要在这里使用git cherry pick吗

  • 很长一段时间以来,我一直在使用Fortran但是如果你可以像在C语言中一样使用参数化宏,那么最好的选择就是使用一个类似的条件宏

    #define DECLARE_HIGH_PRECISION(Name, Val, Exp) \
    #ifdef QUAD_PREC \
    REAL*8 %Name% = %Val%Q%Exp% \
    #else \
    REAL*4 %Name% = %Val%D%Exp% \
    #endif 
    

    声明并初始化您的值为
    declare\u HIGH\u PRECISION(Fred,23,-3)
    您可能还需要一个宏用于不需要名称的内联值,以便能够执行类似
    Fred=Fred*HIGH\u PRECISION(43,+6)
    等操作。

    我假设需要重复的代码存在于多个文件中,对的另外,Fortran预处理器命令:我认为预处理器命令可能是您想要的(列为您的#3)。谢谢@BlackPlanet!我考虑过这个选择,但在一年多的时间里,我只看到少数人对问题和答案投了赞成票,这意味着我觉得这不是一个明显的最佳解决方案。我可以看到自己使用#define将REAL*8改为REAL*16,但将“4d3”的每一个实例都转换为“4q3”和“2D+01”改为“2Q+01”,你知道我是否可以列出这些完整的数字(完全没有科学符号)依靠编译器将它们转换成它们各自变量定义为的任何类型的数字?嗯,老实说,我对Fortran不太了解。虽然这不是最佳选择,但您可以使用任何语言编写脚本,以便在构建时对这些模式运行regex find/replace。在git中签出一个分支后,必须运行某种“make”命令并不少见。