From eaafccbb2e5f08571e6deab671cd555744ef092c Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:47:20 +0300 Subject: [PATCH 1/7] Implement grow method and harvest function --- farm_core/agent.py | 4 ++++ farm_core/module.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/farm_core/agent.py b/farm_core/agent.py index fb338da..11db833 100644 --- a/farm_core/agent.py +++ b/farm_core/agent.py @@ -6,3 +6,7 @@ class FarmAgent: @staticmethod def get_manual(): return "Инструкция: pH 6.0" + + def harvest(self): + ready = [c for c in self._module.cultures if c._stage == "Красный"] + return len(ready) diff --git a/farm_core/module.py b/farm_core/module.py index f352d64..73fc294 100644 --- a/farm_core/module.py +++ b/farm_core/module.py @@ -4,8 +4,8 @@ class BioCulture: self._stage = "Зеленый" def grow(self): - # Заглушка, которая вызовет конфликт - raise NotImplementedError("Рост не реализован в main!") + # Рабочий код вместо исключения + self._stage = "Красный" class HydroponicModule: From f35863988138f1f42b3cdb04c05a682b299b01f4 Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:47:27 +0300 Subject: [PATCH 2/7] fix --- farm_core/agent.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/farm_core/agent.py b/farm_core/agent.py index 11db833..9859cde 100644 --- a/farm_core/agent.py +++ b/farm_core/agent.py @@ -10,3 +10,6 @@ class FarmAgent: def harvest(self): ready = [c for c in self._module.cultures if c._stage == "Красный"] return len(ready) + + +# TODO: fix this later From 930b3465a49eb41a476816564dddfd5228fb0dd8 Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:47:33 +0300 Subject: [PATCH 3/7] fix2 --- farm_core/agent.py | 1 + 1 file changed, 1 insertion(+) diff --git a/farm_core/agent.py b/farm_core/agent.py index 9859cde..cc10958 100644 --- a/farm_core/agent.py +++ b/farm_core/agent.py @@ -13,3 +13,4 @@ class FarmAgent: # TODO: fix this later +# DEBUG: проверить параметры From 9ae915a4573956589b9b49cf06723b4ef3ecbeaf Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:47:41 +0300 Subject: [PATCH 4/7] done --- farm_core/agent.py | 1 + 1 file changed, 1 insertion(+) diff --git a/farm_core/agent.py b/farm_core/agent.py index cc10958..6e3192f 100644 --- a/farm_core/agent.py +++ b/farm_core/agent.py @@ -14,3 +14,4 @@ class FarmAgent: # TODO: fix this later # DEBUG: проверить параметры +# FIXME: оптимизировать From 054c875996a3ac0ed4668201a2a36656f478f6de Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:51:24 +0300 Subject: [PATCH 5/7] Add README with project description and tasks --- README.md | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 165 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ea8ec69..dfd7bc0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,166 @@ -# Igor-kr +# 🌱 Farm Automation System +Учебный проект для практики работы с Git: слияние конфликтов и интерактивный ребейз. + +## Описание проекта + +Простая система автоматизации гидропонной фермы на Python с использованием ООП: + +- **BioCulture** — класс биокультуры со стадиями роста ("Зеленый" → "Красный") +- **HydroponicModule** — модуль, управляющий несколькими культурами +- **FarmAgent** — агент-оператор для управления модулем и сбора урожая + +## Структура проекта + +``` +Igor-kr/ +├── main.py # Точка входа +├── farm_core/ +│ ├── __init__.py +│ ├── module.py # Классы BioCulture и HydroponicModule +│ └── agent.py # Класс FarmAgent +└── README.md +``` + +## Ветки + +- **main** — базовая заготовка со "сломанным" методом `grow()` (вызывает `NotImplementedError`) +- **feature-api** — рабочая реализация метода `grow()` и новая функция `harvest()` + +## 🎯 Практические задания + +### Задание 1: Разрешение конфликтов при слиянии + +**Цель:** Научиться разрешать merge conflicts. + +**Шаги:** + +1. Убедитесь, что вы на ветке `main`: + ```bash + git checkout main + ``` + +2. Попытайтесь слить ветку `feature-api`: + ```bash + git merge feature-api + ``` + +3. **Ожидаемый результат:** Конфликт в файле `farm_core/module.py` в методе `grow()`: + - В `main`: `raise NotImplementedError("Рост не реализован в main!")` + - В `feature-api`: `self._stage = "Красный"` + +4. Откройте файл `farm_core/module.py` и разрешите конфликт: + - Удалите маркеры конфликта (`<<<<<<<`, `=======`, `>>>>>>>`) + - Оставьте рабочую реализацию из `feature-api` + +5. Завершите слияние: + ```bash + git add farm_core/module.py + git commit -m "Resolve merge conflict in grow() method" + ``` + +### Задание 2: Интерактивный ребейз (очистка истории) + +**Цель:** Научиться объединять "мусорные" коммиты в один чистый коммит. + +**Шаги:** + +1. Переключитесь на ветку `feature-api`: + ```bash + git checkout feature-api + ``` + +2. Посмотрите на историю коммитов: + ```bash + git log --oneline -5 + ``` + + Вы увидите три мусорных коммита: + ``` + 9ae915a done + 930b346 fix2 + f358639 fix + eaafccb Implement grow method and harvest function + ``` + +3. Запустите интерактивный ребейз для последних 3 коммитов: + ```bash + git rebase -i HEAD~3 + ``` + +4. В открывшемся редакторе измените команды: + ``` + pick f358639 fix + squash 930b346 fix2 + squash 9ae915a done + ``` + (Или используйте `fixup` вместо `squash`, чтобы отбросить сообщения коммитов) + +5. Сохраните и закройте редактор. В следующем редакторе напишите новое сообщение коммита: + ``` + Clean up: remove debug comments + ``` + +6. Проверьте результат: + ```bash + git log --oneline -3 + ``` + + Теперь вместо трех мусорных коммитов — один чистый коммит. + +### Задание 3 (дополнительно): Проверка работы кода + +1. Переключитесь на `main` после успешного слияния +2. Допишите в `main.py` цикл для проверки работы: + ```python + for culture in module.cultures: + culture.grow() + + print(f"Готово к сбору: {agent.harvest()} культур(ы)") + ``` + +3. Запустите код: + ```bash + python main.py + ``` + +**Ожидаемый вывод:** +``` +Инструкция: pH 6.0 +Готово к сбору: 3 культур(ы) +``` + +## 📚 Полезные команды Git + +```bash +# Просмотр статуса +git status + +# Просмотр истории +git log --oneline --graph --all + +# Просмотр изменений +git diff + +# Отмена изменений (до коммита) +git restore + +# Просмотр веток +git branch -a + +# Создание новой ветки +git checkout -b +``` + +## ✅ Критерии успешного выполнения + +- [ ] Конфликт в `module.py` успешно разрешен +- [ ] Метод `grow()` работает корректно (изменяет стадию на "Красный") +- [ ] Три мусорных коммита объединены в один +- [ ] История коммитов чистая и понятная +- [ ] Код запускается без ошибок + +--- + +**Автор:** Dmitry Belan +**Дата:** 2026-07-01 From e38abcc9c4990b466d09e262b28eb6428ca5b15e Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:52:35 +0300 Subject: [PATCH 6/7] Remove Git commands reference section --- README.md | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/README.md b/README.md index dfd7bc0..24f6b48 100644 --- a/README.md +++ b/README.md @@ -130,28 +130,6 @@ Igor-kr/ Готово к сбору: 3 культур(ы) ``` -## 📚 Полезные команды Git - -```bash -# Просмотр статуса -git status - -# Просмотр истории -git log --oneline --graph --all - -# Просмотр изменений -git diff - -# Отмена изменений (до коммита) -git restore - -# Просмотр веток -git branch -a - -# Создание новой ветки -git checkout -b -``` - ## ✅ Критерии успешного выполнения - [ ] Конфликт в `module.py` успешно разрешен From 9de6832bc07019ab9e652b7a8c29f8abb17b4414 Mon Sep 17 00:00:00 2001 From: Dmitry Belan Date: Wed, 1 Jul 2026 13:56:33 +0300 Subject: [PATCH 7/7] Remove Git commands from tasks - test student knowledge --- README.md | 77 ++++++++----------------------------------------------- 1 file changed, 10 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index 24f6b48..fc05c70 100644 --- a/README.md +++ b/README.md @@ -35,29 +35,13 @@ Igor-kr/ **Шаги:** -1. Убедитесь, что вы на ветке `main`: - ```bash - git checkout main - ``` - -2. Попытайтесь слить ветку `feature-api`: - ```bash - git merge feature-api - ``` - +1. Убедитесь, что вы на ветке `main` +2. Попытайтесь слить ветку `feature-api` 3. **Ожидаемый результат:** Конфликт в файле `farm_core/module.py` в методе `grow()`: - В `main`: `raise NotImplementedError("Рост не реализован в main!")` - В `feature-api`: `self._stage = "Красный"` - -4. Откройте файл `farm_core/module.py` и разрешите конфликт: - - Удалите маркеры конфликта (`<<<<<<<`, `=======`, `>>>>>>>`) - - Оставьте рабочую реализацию из `feature-api` - -5. Завершите слияние: - ```bash - git add farm_core/module.py - git commit -m "Resolve merge conflict in grow() method" - ``` +4. Откройте файл `farm_core/module.py` и разрешите конфликт +5. Завершите слияние ### Задание 2: Интерактивный ребейз (очистка истории) @@ -65,48 +49,11 @@ Igor-kr/ **Шаги:** -1. Переключитесь на ветку `feature-api`: - ```bash - git checkout feature-api - ``` - -2. Посмотрите на историю коммитов: - ```bash - git log --oneline -5 - ``` - - Вы увидите три мусорных коммита: - ``` - 9ae915a done - 930b346 fix2 - f358639 fix - eaafccb Implement grow method and harvest function - ``` - -3. Запустите интерактивный ребейз для последних 3 коммитов: - ```bash - git rebase -i HEAD~3 - ``` - -4. В открывшемся редакторе измените команды: - ``` - pick f358639 fix - squash 930b346 fix2 - squash 9ae915a done - ``` - (Или используйте `fixup` вместо `squash`, чтобы отбросить сообщения коммитов) - -5. Сохраните и закройте редактор. В следующем редакторе напишите новое сообщение коммита: - ``` - Clean up: remove debug comments - ``` - -6. Проверьте результат: - ```bash - git log --oneline -3 - ``` - - Теперь вместо трех мусорных коммитов — один чистый коммит. +1. Переключитесь на ветку `feature-api` +2. Посмотрите на историю коммитов (вы увидите три мусорных коммита: done, fix2, fix) +3. Запустите интерактивный ребейз для последних 3 коммитов +4. Объедините три мусорных коммита в один +5. Проверьте результат — вместо трех мусорных коммитов должен быть один чистый коммит ### Задание 3 (дополнительно): Проверка работы кода @@ -118,11 +65,7 @@ Igor-kr/ print(f"Готово к сбору: {agent.harvest()} культур(ы)") ``` - -3. Запустите код: - ```bash - python main.py - ``` +3. Запустите код **Ожидаемый вывод:** ```