Два варианта одного и того же кода в git: ветка, форк или отдельный репозиторий?

У меня есть следующие два варианта кода (96 файлов), и ТОЛЬКО различия между ними указаны в скобках:

  1. ДВОЙНАЯ ТОЧНОСТЬ (каждая переменная определяется как REAL*8, а каждое число определяется как 1234D+02)
  2. QUADRUPLE-PRECISION (каждая переменная определяется как REAL*16, а каждое число определяется как 1234Q+02)

Если я буду что-то менять в программе, я хочу, чтобы это изменение было одинаковым в обоих приведенных выше вариантах кода.

В Git(Hub) я должен:

  1. Создайте отдельный репозиторий (как я буду легко объединять изменения?),
  2. Создайте другую ветку (но ветвление кажется лучшим, когда нужно объединить весь код),
  3. Построить форк (но это, кажется, для людей, которые не могут нажать на основную ветку)?

Вот некоторые вопросы, которые связаны, но не то, что я хочу. Я написал, почему я не проглотил их ответы:

  1. поддерживать разные версии кода одновременно с помощью git: В ответе Тобу говорится: «git cherry-pick во многих случаях может не работать».
  2. управление несколькими версиями веб-приложения с помощью git: предлагает подмодули git, но есть причины отказа.
  3. Отслеживание вариантов исходного кода: предлагает использовать #define , но есть ли эквивалент FORTRAN ?
  4. Как отслеживать две версии проекта в одном репозитории GIT?: предлагает 3-ю ветку для «общего» кода, но я не вижу преимущества наличия более 2-х. И не нужно ли мне здесь использовать git cherry-pick?

person user1271772    schedule 10.08.2013    source источник
comment
Я предполагаю, что этот код, который требует почти дублирования, находится более чем в паре файлов, верно? Кроме того, команды препроцессора Fortran: software.intel.com/sites/products/documentation/doclib/stdxe/   -  person BlackVegetable    schedule 11.08.2013
comment
Я думаю, что команда препроцессора, вероятно, то, что вам нужно (указана как ваш # 3).   -  person BlackVegetable    schedule 11.08.2013
comment
Спасибо @BlackVegetable! Я рассматривал этот вариант, но, увидев всего несколько голосов за вопрос И ответ за более чем год, означал, что он не показался мне очевидным лучшим решением. Я вижу, как использую #define для изменения REAL*8 на REAL*16 , но не столько для преобразования каждого экземпляра 4d3 в 4q3 и 2D+01 в 2Q+01 , не знаете ли вы, могу ли я просто перечислить эти полные числа ( вообще без экспоненциальной записи) и полагаться на то, что компилятор преобразует их в любой тип числа, в котором их соответствующие переменные были определены как ?   -  person user1271772    schedule 11.08.2013
comment
Хм, я, честно говоря, мало что знаю о Fortran. Хотя это не было бы оптимальным, вы можете написать скрипт на любом языке, который вам нравится, чтобы выполнять поиск/замену регулярных выражений для тех шаблонов, которые выполняются во время сборки. Нередко приходится запускать определенную команду make после проверки ветки в git.   -  person BlackVegetable    schedule 11.08.2013


Ответы (1)


Давным-давно я не делал ничего на Фортране, но если вы можете иметь параметризованные макросы, основанные, как вы можете в 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_HIGH_PRECISION(Fred, 23, -3) вам, вероятно, также понадобится макрос для встроенных значений, которым не нужно имя, чтобы иметь возможность делать такие вещи, как Fred = Fred * HIGH_PRECISION(43, +6) и т. д.

person Steve Barnes    schedule 11.08.2013