03.01 git: работа с ветками
- разогрев
- беглое повторение про ветки
qgit и полная история
пример с пересаживанием ветки
пример с мержем
пример с «переотрастанием» ветки при rebase (aka «ветка — не ветка»)
- немного о проектировании сверху вниз:
- Интерфейсная модель (хоть на бумажке!)
- Шаблон с затычками вместо обработчиков
- Реализация обработчиков (возможно, параллельная)
Задача_1: работа с ветками в git при разработке программы на tkinter. Требуется написать программу с графическим интерфейсом (ГИ), причем на основной ветке разработки добавляются элементы ГИ и заглушки обработчиков событий (с привязкой к элементам ГИ), а на feature-ветке - реализации обработчиков событий.
- Интерфейсная модель и шаблон в ветке master
Создайте ветку task1_20210301_master (каталог с решением назовите как обычно)
- Реализуйте в ней (по одному коммиту на пункт)
- Создание окна программы
Кнопка Exit + заглушка обработчика нажатия кнопки Exit
Обязательно использование docstring для всех обработчиков
Текстовая метка с начальным текстом <MenuItem>
Кнопка Next item + заглушка обработчика нажатия кнопки Next item
Выпадающее меню (optionmenu) с элементами "One", "Two", "Three" и StringVar для хранения значения
- Обработчик нажатия кнопки "Exit", закрывающий окно программы
Полученное приложение должно запускаться, и выходить по Exit
Посмотрите структуру веток в qgit
- Разработка логики выпадающего меню в devel-ветке с последующим слиянием (merge)
Создайте ветку task1_20210301_additem на базе коммита и переключитесь на неё (проверьте!)
- Реализуйте в ней (по одному коммиту на пункт) следующее:
Добавьте четвертый элемент — "Four" — в выпадающее меню
- Привяжите содержимое текстовой метки к строковой переменной выпадающего меню
- Полученное приложение должно запускаться и менять содержимое текстовой метки при изменении значения выпадающего меню
Посмотрите структуру веток в qgit
- Разработка логики кнопки в devel-ветке с последующим дописыванием в историю (rebase)
Создайте ветку task1_20210301_show на базе коммита и переключитесь на неё (проверьте!)
- Реализуйте в ней (по одному коммиту на пункт) следующее:
Обработчик нажатия кнопки Next item, который выбирает в выпадающем меню следующий пункт (после последнего идёт первый)
Полученное приложение должно запускаться и менять содержимое выпадающего меню при нажатии кнопки Next item
Посмотрите структуру веток в qgit
Сделайте merge ветки task1_20210301_additem на ветку task1_20210301_master
- Полученное приложение должно
запускаться и выходить по Exit
- менять содержимое текстовой метки при изменении значения выпадающего меню
посмотрите структуру веток в qgit
- Полученное приложение должно
Добавьте историю (rebase) ветки task1_20210301_show в ветку task1_20210301_master (где к этому шагу будет merge-коммит)
Внимание! в результате именно ветка task1_20210301_master должна вобрать в себя все коммиты (т. е. команда должна быть git rebase task1_20210301_show task1_20210301_master)
- Полученное приложение должно
запускаться и выходить по Exit
- менять содержимое текстовой метки при изменении значения выпадающего меню
менять содержимое выпадающего меню и текстовой метки при нажатии кнопки Next item
- посмотрите структуру веток в qgit
Если всё работает корректно, залейте (merge) task1_20210301_master на основную ветку (master)
- Интерфейсная модель и шаблон в ветке master
Д/З
- Доделать всё, убедиться, что работает
Опубликовать ветку task1_20210301_master
- Если оно отказывается (потому что соответствующей ветки нет в публичном репозитории), поможет команда
git push origin task1_20210301_master
которая создаёт в публичном репозитории (по умолчанию он называется origin) ветку task1_20210301_master и публикует содержимое текущей ветки (проверьте, что это task1_20210301_master)
Если вы ошиблись с публикацией, ключ --force обновит историю на удалённом репозитории, даже если она расходится с локальной! ВНИМАНИЕ! Это опасная операция.
- Если оно отказывается (потому что соответствующей ветки нет в публичном репозитории), поможет команда
Обновить и опубликовать основную ветку master