# Практические кейсы и ежедневные сценарии
Описание страницы: Шаблоны действий в стандартных ситуациях администрирования инфраструктуры через Git.

🔧 Сценарий 1: Редактирование существующего файла конфигурации

🎯 Задача: Необходимо изменить существующий плейбук playbooks/site.yml (например, скорректировать пути бэкапов) и зафиксировать это в истории.

1. Перейдите в каталог репозитория и обновите файлы до актуального состояния:

cd ~/projects/infra
git pull origin main

2. Откройте файл в вашем текстовом редакторе для внесения изменений:

# Введите команду редактирования (например, "nano" или ваш настроенный alias "edit" для Notepad++)
edit playbooks/site.yml

3. Сохраните изменения, вернитесь в консоль и зафиксируйте их:

# Проверьте, какие файлы были изменены
git status -s

# Добавьте измененный файл в индекс
git add playbooks/site.yml

# Создайте коммит с понятным описанием изменений
git commit -m "fix: update backup paths in site.yml"

# Отправьте коммит на сервер Gitea
git push origin main
---

📦 Сценарий 2: Создание новой роли/файла (Работа с Untracked-файлами)

🎯 Задача: Добавить в структуру репозитория совершенно новый файл роли roles/nginx/tasks/main.yml.

1. Создайте структуру каталогов и откройте новый файл в редакторе:

mkdir -p roles/nginx/tasks
edit roles/nginx/tasks/main.yml

2. Начните отслеживание нового файла в Git:

⚠️ Безопасность: Не используйте команду git add . в корневом каталоге. Она может случайно захватить временные лог-файлы или незашифрованные файлы секретов. Добавляйте новые файлы точечно, прописывая к ним явные пути.
# Проверьте статус (файл должен находиться в категории Untracked)
git status

# Явно укажите Git начать отслеживание этого файла
git add roles/nginx/tasks/main.yml

# Создайте коммит и отправьте его на сервер
git commit -m "feat: add basic task layout for nginx role"
git push origin main
---

🌿 Сценарий 3: Изолированное тестирование рискованных изменений

🎯 Задача: Необходимо провести глобальный рефакторинг конфигурационных файлов серверов, но так, чтобы не сломать стабильную ветку main, с которой работают остальные члены команды.

1. Создайте изолированную экспериментальную ветку и перейдите на неё:

# Переключитесь на актуальную версию ветки main
git switch main
git pull origin main

# Создайте ветку эксперимента
git switch -c experiment/global-refactor

2. Отредактируйте файлы и зафиксируйте изменения локально:

# Откройте плейбук для внесения тестовых изменений
edit playbooks/base_setup.yml

# Так как мы находимся в изолированной ветке, мы можем безопасно добавить изменения измененных файлов
git add -u
git commit -m "refactor: apply experimental directory structuring"

3. Примите решение по результатам тестирования:

ВАРИАНТ А Эксперимент удался. Вливаем изменения в основную ветку:

# Вернитесь в ветку main
git switch main

# Слейте изменения из экспериментальной ветки в основную
git merge experiment/global-refactor

# Отправьте объединенный результат на сервер
git push origin main

ВАРИАНТ Б Эксперимент провалился. Безболезненно удаляем ветку:

# Вернитесь на стабильную ветку main
git switch main

# Принудительно удалите испорченную ветку эксперимента
git branch -D experiment/global-refactor
---

💥 Сценарий 4: Разрешение конфликтов при попытке слияния

🎯 Задача: При попытке обновиться через git pull или выполнить merge, консоль выдала ошибку "CONFLICT (content): Merge conflict in playbooks/site.yml".

1. Локализуйте конфликтный файл:

git status
# Ищите пометку "both modified: playbooks/site.yml"

2. Откройте этот файл в текстовом редакторе:

edit playbooks/site.yml

3. Найдите в тексте разделительные маркеры Git:

<<<<<<< HEAD
Ваша локальная версия (то, что было у вас на компьютере)
=======
Удаленная версия (то, что кто-то уже успел отправить на Gitea)
>>>>>>> a1b2c3d4...

4. Отредактируйте конфликтную область:
Удалите маркеры конфликта (`<<<<<<<`, `=======`, `>>>>>>>`) и оставьте только правильную логику (возможно, объединив обе версии).

5. Зафиксируйте успешное решение конфликта в репозитории:

# Сообщите Git, что конфликт решен
git add playbooks/site.yml

# Завершите операцию слияния
git commit -m "merge: resolve conflicts in site.yml"