С помощью 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