С помощью Git, как применить разницу двух версий в ветви A к ветви B?

У нас есть стороннее программное обеспечение, которое меняется примерно 3-4 раза в год. Код поставщика, очевидно, не учитывает наши настройки, и когда его последний код (один файл Pro*C) применяется к нашей производственной системе, он стирает их все.

Сотрудник предложил поместить этот код в Git и попытаться использовать его инструменты для управления изменениями. Для этого мы сделали следующее. Я создал две ветви в Git, основную ветку по умолчанию и еще одну с именем "custom". В пользовательской ветке первая версия файла представляет собой немодифицированную версию выпуска с октября прошлого года, а вторая версия файла с нашими настройками успешно применена и протестирована.

В основной ветке первая версия снова октябрьская. Второй - их (текущий) мартовский релиз.

Какие шаги мне нужно предпринять, чтобы применить различия между двумя версиями пользовательских ветвей к основной ветке?

В Subversion было несколько учебных пособий и примеров, доступных для так называемых "отбрасываний вендоров", но я не нахожу много по этому сценарию с Git. Определенно нужно работать над моими навыками Git.

1 ответ

Решение

Это так просто, SVN будет полностью смущен даже за учебник по этому вопросу.

Давайте посмотрим на ваш сценарий на этом графике:

A -- master
 \
  B -- custom

На этом графике A является оригинальным октябрьским выпуском стороннего программного обеспечения. B это изменения, которые вы сделали.

Теперь появился новый мартовский выпуск стороннего программного обеспечения.

Шаг 1: Очевидная часть

Сначала поставьте новую версию в репозиторий в ветке master:

$ git checkout master    # go to master
$ cp -R ../march/* .     # overwrite with new version
$ git add ????           # add any new files they might have added (check with `git status`)
$ git commit -a          # make a new commit

Я считаю, что этот шаг был совершенно очевидным. Итак, теперь у вас есть следующий график:

A----C -- master
 \
  B -- custom

куда C это новый коммит, содержащий мартовский релиз.

Шаг 2: Супер простая часть

Теперь это все, что вам нужно сделать:

$ git checkout custom    # go to custom
$ git merge master       # get the changes over

Готово.

График сейчас:

A----C -- master
 \    \
  B----D -- custom
Другие вопросы по тегам