2014-10-10 2 views
2

У меня есть проект в git, и есть две ветки, которые содержат почти тот же код. В основном они содержат код для связи с двумя версиями аппаратного блока. Большая часть кода такая же, но есть различия из-за изменений в базовом оборудовании.Как использовать Git для ветвей с очень похожим кодом

По другим причинам мы не хотим объединять две ветви в одном и делать некоторые «если версия А, а затем что-то другое, если версия B then somethingdifferent ....». Поэтому каждый раз, когда мы делаем «глобальное» изменение, нам нужно сделать это в обеих ветвях. Это может раздражать, но с помощью TortoiseGIT и инструмента для слияния быстро переносить изменения из ветки в ветку, и я боюсь, что в git нет механизма, который мог бы упростить это. Но мне хотелось бы, по крайней мере, сообщить git (и показать в журнале), что эти две ветви были «концептуально объединены». Есть ли способ, как это сделать?

Для полноты - это проект Delphi, но я не думаю, что это относится к проблеме.

+0

Может быть, вы должны переместить общую часть в другой проект? http://git-scm.com/book/en/Git-Tools-Submodules – damgad

+0

Это также вариант, но это приведет к более сложной структуре классов в проекте, и в этом случае мы решили, что это не стоит (у проекта уже около 45 подмодулей :-)) –

ответ

0

Я бы отследил одну из ветвей от другой.

Создание филиалов:

git checkout -b b1 origin/master 
git push origin HEAD 
git checkout -b b2 origin/b1 
git push origin HEAD 

Теперь b2 b1 треков.

После обновления b1 вы можете сделать это, чтобы перебазировать специфику ветви на b2 на новую версию b1:

git checkout b2 
git pull -r 
+0

Мне нужно будет больше поработать над этим, но одна вещь, которую я боюсь, это то, что git попытается объединить ветви, и это может привести к полному беспорядку ... –

+0

Если если get это правильно, это означает, что b2 будет отслеживать изменения в b1, но что, если я хотел бы объединить некоторую работу с b2 на b1. Я не мог бы просто толкнуть, а не тянуть? И «циклическое» отслеживание, вероятно, тоже очень неверно :-) –

+0

Да, вы всегда будете обновлять b1 и наследовать обновление на b2. Никогда наоборот. – Martin

0

Но то, что я хотел бы, чтобы по крайней мере, пусть мерзавцу знать (и шоу в журнале), что эти две ветви были «концептуально объединены»

Git предлагает git merge -s ours именно для этой цели. Это создаст историю слияния, показывая ветки, которые были объединены, но не изменит никакого содержимого. С этого момента вы могли бы отслеживать изменения в одной ветви, но не в другой, довольно легко.

Обратите внимание, что я не думаю, что это лучшее решение для вас, хотя, но все мои нормальные предложения рабочего процесса вы явно говорят, что вы не хотите :)

-A

+0

Мы используем эту технику для «функционального слияния». Вы создаете ветвь для реализации некоторых новых функций, и в этой отрасли вам не важно качество кода. Когда код работает, вы объединяете его в отрасль качества производства с нашей стратегией, и в основном вы создаете новый код на основе «уродливого» (с большим количеством копий/вложений ofc). И я согласен с тем, что этот рабочий процесс не очень хороший, но он отлично работает, и одна из ветвей будет устаревать через некоторое время и т. Д. Поэтому мы не хотим прилагать много усилий для реорганизации кода.Я просто хотел знать, может ли git каким-то образом регистрировать/показать отношение ветвей. –

Смежные вопросы