Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9de6832bc0 | |||
| e38abcc9c4 | |||
| 054c875996 | |||
| 9ae915a457 | |||
| 930b3465a4 | |||
| f358639881 | |||
| eaafccbb2e |
@@ -1,2 +1,87 @@
|
|||||||
# 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`
|
||||||
|
2. Попытайтесь слить ветку `feature-api`
|
||||||
|
3. **Ожидаемый результат:** Конфликт в файле `farm_core/module.py` в методе `grow()`:
|
||||||
|
- В `main`: `raise NotImplementedError("Рост не реализован в main!")`
|
||||||
|
- В `feature-api`: `self._stage = "Красный"`
|
||||||
|
4. Откройте файл `farm_core/module.py` и разрешите конфликт
|
||||||
|
5. Завершите слияние
|
||||||
|
|
||||||
|
### Задание 2: Интерактивный ребейз (очистка истории)
|
||||||
|
|
||||||
|
**Цель:** Научиться объединять "мусорные" коммиты в один чистый коммит.
|
||||||
|
|
||||||
|
**Шаги:**
|
||||||
|
|
||||||
|
1. Переключитесь на ветку `feature-api`
|
||||||
|
2. Посмотрите на историю коммитов (вы увидите три мусорных коммита: done, fix2, fix)
|
||||||
|
3. Запустите интерактивный ребейз для последних 3 коммитов
|
||||||
|
4. Объедините три мусорных коммита в один
|
||||||
|
5. Проверьте результат — вместо трех мусорных коммитов должен быть один чистый коммит
|
||||||
|
|
||||||
|
### Задание 3 (дополнительно): Проверка работы кода
|
||||||
|
|
||||||
|
1. Переключитесь на `main` после успешного слияния
|
||||||
|
2. Допишите в `main.py` цикл для проверки работы:
|
||||||
|
```python
|
||||||
|
for culture in module.cultures:
|
||||||
|
culture.grow()
|
||||||
|
|
||||||
|
print(f"Готово к сбору: {agent.harvest()} культур(ы)")
|
||||||
|
```
|
||||||
|
3. Запустите код
|
||||||
|
|
||||||
|
**Ожидаемый вывод:**
|
||||||
|
```
|
||||||
|
Инструкция: pH 6.0
|
||||||
|
Готово к сбору: 3 культур(ы)
|
||||||
|
```
|
||||||
|
|
||||||
|
## ✅ Критерии успешного выполнения
|
||||||
|
|
||||||
|
- [ ] Конфликт в `module.py` успешно разрешен
|
||||||
|
- [ ] Метод `grow()` работает корректно (изменяет стадию на "Красный")
|
||||||
|
- [ ] Три мусорных коммита объединены в один
|
||||||
|
- [ ] История коммитов чистая и понятная
|
||||||
|
- [ ] Код запускается без ошибок
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Автор:** Dmitry Belan
|
||||||
|
**Дата:** 2026-07-01
|
||||||
|
|||||||
@@ -6,3 +6,12 @@ class FarmAgent:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def get_manual():
|
def get_manual():
|
||||||
return "Инструкция: pH 6.0"
|
return "Инструкция: pH 6.0"
|
||||||
|
|
||||||
|
def harvest(self):
|
||||||
|
ready = [c for c in self._module.cultures if c._stage == "Красный"]
|
||||||
|
return len(ready)
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: fix this later
|
||||||
|
# DEBUG: проверить параметры
|
||||||
|
# FIXME: оптимизировать
|
||||||
|
|||||||
+2
-2
@@ -4,8 +4,8 @@ class BioCulture:
|
|||||||
self._stage = "Зеленый"
|
self._stage = "Зеленый"
|
||||||
|
|
||||||
def grow(self):
|
def grow(self):
|
||||||
# Заглушка, которая вызовет конфликт
|
# Рабочий код вместо исключения
|
||||||
raise NotImplementedError("Рост не реализован в main!")
|
self._stage = "Красный"
|
||||||
|
|
||||||
|
|
||||||
class HydroponicModule:
|
class HydroponicModule:
|
||||||
|
|||||||
Reference in New Issue
Block a user