📖 Командная работа в Git
⚡ Суть занятия
- Командный workflow: issue → назначить → ветка → PR → обсуждение → merge → rebase
- Скрипт 1: копирование файлов по расширению (read -p + find + cp)
- Скрипт 2: авто-коммит ([ ! -d .git ] + git add . + git diff-index + git commit)
Концепция командной работы в Git
Командная работа в Git — воспроизводится процесс совместной разработки. Назначая индивидуальные задания по отдельным issue или работая в малых группах, можно получить навыки и практический опыт совместной работы в команде над одним проектом.
Командный workflow
- Issue — формулирование задачи в системе отслеживания (GitHub/GitLab). Каждый участник или группа получает свою задачу.
- Ветка — для каждой задачи создаётся отдельная ветка:
git checkout -b feature/issue-N - Реализация — работа над задачей в своей ветке, коммиты
- Pull Request (PR) — предложение изменений для обсуждения:
git push origin feature/issue-N→ открыть PR - Code Review — обсуждение PR командой, правки
- Merge — после одобрения слияние в основную ветку
- Rebase — обеспечение актуальности других веток после слияния:
git rebase main
Репозиторий для практики: https://github.com/it-career-hub/git_team_work.git
Скрипт 1: копирование файлов по расширению
Скрипт запрашивает у пользователя исходную директорию, целевую директорию и расширение файлов для копирования. Затем находит и копирует подходящие файлы.
Структура скрипта (план из issue)
- Запросить исходную и целевую директории у пользователя
- Запросить расширение файлов для копирования
- Проверить существование исходной директории
- Проверить существование целевой директории
- Найти файлы с указанным расширением в исходной директории
- Скопировать файлы в целевую директорию
Ключевые конструкции
read -p — ввод с подсказкой
read -p "Введите исходную директорию: " source_directory
read -p "Введите целевую директорию: " target_directory
read -p "Введите расширение файлов для копирования (без точки): " file_extension
read -p "Подсказка: " ПЕРЕМЕННАЯ — bash built-in. Выводит подсказку без перевода строки, затем ждёт ввода.
[ ! -d ] — проверка существования директории
if [ ! -d "$source_directory" ]; then
echo "Директория '$source_directory' не существует или недоступна."
exit 1
fi
-d — проверяет, является ли путь директорией. ! инвертирует условие.
find -maxdepth 1 — поиск файлов по расширению
matching_files=$(find "$source_directory" -maxdepth 1 -type f -name "*.$file_extension")
-maxdepth 1— искать только в указанной директории (не рекурсивно)-type f— только обычные файлы (не директории)-name "*.$file_extension"— шаблон имени файла
cp — копирование найденных файлов
for file in $matching_files; do
cp "$file" "$target_directory"
echo "Скопирован файл: $file"
done
Скрипт 2: автоматический коммит
Скрипт проверяет, находится ли текущая директория в Git-репозитории. Если да — добавляет все изменения и делает коммит с временной меткой.
Структура скрипта (план из issue)
- Проверить текущую директорию на наличие репозитория Git
- Добавить изменения в индекс
- Проверить наличие изменений для коммита
- Создать коммит с датой и временем
- Вывести результат выполнения
Ключевые конструкции
[ ! -d ".git" ] — проверка наличия репозитория
if [ ! -d ".git" ]; then
echo "Текущая директория не является репозиторием Git."
exit 1
fi
Простая проверка: если директория .git отсутствует — это не Git-репозиторий.
git add . — добавить все изменения
git add .
git add . добавляет ВСЕ изменённые и новые файлы в текущей директории и поддиректориях. В скрипте автоматического коммита это может включить нежелательные файлы (временные файлы, конфигурации с паролями, логи). Перед автоматизацией убедитесь, что настроен .gitignore.
git diff-index --quiet HEAD — проверка наличия изменений
if git diff-index --quiet HEAD --; then
echo "Нет изменений для фиксации."
exit 0
fi
git diff-index --quiet HEAD -- — нестандартная команда для проверки: сравнивает рабочий индекс с HEAD. Если изменений нет — выходит с кодом 0 (успех), что в условии if означает «истина» → нет изменений. Если есть изменения — выходит с кодом 1 → блок if пропускается и выполняется коммит.
git commit с датой и временем
git commit -m "Автоматический коммит $(date +'%Y-%m-%d %H:%M:%S')"
Подстановка $(date +'%Y-%m-%d %H:%M:%S') добавляет временну́ю метку в сообщение коммита.