ситуации Я думаю, что картина является лучшим объяснением:Git: Обновление ветви, которые зависят друг от друга
Как вы можете видеть, у нас есть несколько филиалов, большинство из них solution-xyz-foo
для изменения номера xyz
. solution-12
строит на solution-11
и так далее. Также имеются некоторые отклонения от этого правила, например. филиал hystrix-dashboard-demo
.
Мотивация Код в филиалах используется участниками курса в классе. Таким образом, участники решают упражнения и, в конце курса, заканчивают кодом, подобным тому, который мы предоставили в ветке solution-24
. В случае, если участники опережают или сталкиваются с какой-то другой проблемой, он может легко проверить соответствующую ветку и продолжить выполнение остальных упражнений.
Кроме того, можно рассмотреть решения каждого упражнения, которые предоставляются как единое целое.
Другими словами, для участников курса ветви/решения, построенные друг над другом, служат большим преимуществом, которое мы хотели бы сохранить (это основано на отзывах нескольких курсов, проведенных до сих пор).
Как разработчик курса (подготовка упражнений и решений, представление контента участникам и т. Д.), Мы должны время от времени обновлять части кода. Например, это может быть случай, когда мы хотим исправить проблему в solution-3
. Чтобы сделать это исправление видимым в solution-4
и т. Д., Нам нужно либо слить/переустановить/вишнево выбрать фиксацию, содержащую исправление. Чтобы избежать огромного беспорядка, мы решили раздавить все обновления каждого решения в одном коммите, а затем перестроить несколько линейную структуру, показанную на картинке, используя несколько переустановок.
Выпуск Как вы, возможно, догадались, выполнение перевалок - это большая работа. Даже с помощью вспомогательного скрипта (который повторно привязывает ветви к фиксации после переустановки, но их необходимо поддерживать в случае новых/измененных имен ветвей), нам все равно нужно выполнить переустановку, устранить конфликты, повторно присоединить ветки, и вставьте изменения обратно в репозиторий (используя силовое нажатие).
В дополнение к фактической работе, это только члены команды с большим количеством опыта git уверены в этом. Другими словами, те, кто не так уверенно жалуются на процедуру (которую я четко понимаю).
В качестве побочного примечания мы теряем очевидное преимущество git: нет истории изменений (и старые версии теряются). Кроме того, разработчикам необходимо сотрудничать и сообщать об изменениях в коде.
Вопрос Вы можете рекомендовать ЛЮБОЙ тег/ветвь/rebase/... рабочий процесс, который решает следующие проблемы?
- участники курса могут легко оформить в последнюю дату решения для осуществления в настоящее время они работают над (EDIT: В настоящее время, делая это с помощью мыши в Eclipse, является предпочтительным способом)
- решения для каждого упражнения предоставляются удобным образом (т. е.единственная фиксация)
- разработчики могут легко интегрировать исправления и обновления для отдельных решений, так что и позже решения здания на нем обновляются соответственно
- [опционально] история изменений сохраняется
Как примечание, вы можете предположить, что код не изменяется во время прохождения курса (поэтому на компьютерах участников не требуется git remote update
).
Это многообещающе.Я боюсь, что проблема заключается в удобстве использования на стороне участника (git in Eclipse). Я дам ему попробовать завтра, спасибо! –
Используя 'tag-name-filter', я могу обновлять имена уже существующих тегов, поэтому мне пришлось бы добавить магию« фильтр-ветвь », чтобы выполнить фактическую перезагрузку. Вместо этого, я думаю, что я очень доволен тем, что сначала сделал rebase (из последней фиксации поверх изменения), а затем запустил крошечный скрипт, используя трюк ревизии, который вы упомянули в своем ответе на прикрепление тегов. –