145 lines
4.9 KiB
Markdown
145 lines
4.9 KiB
Markdown
# 🌱 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 культур(ы)
|
||
```
|
||
|
||
## ✅ Критерии успешного выполнения
|
||
|
||
- [ ] Конфликт в `module.py` успешно разрешен
|
||
- [ ] Метод `grow()` работает корректно (изменяет стадию на "Красный")
|
||
- [ ] Три мусорных коммита объединены в один
|
||
- [ ] История коммитов чистая и понятная
|
||
- [ ] Код запускается без ошибок
|
||
|
||
---
|
||
|
||
**Автор:** Dmitry Belan
|
||
**Дата:** 2026-07-01
|