🐛 Типичные ошибки
⚡ Главные ошибки
- git add . в авто-скрипте — может включить секретные файлы; настройте .gitignore заранее
- Пробелы в именах файлов —
for file in $matching_filesломается; используйтеfind -print0 | xargs -0 - Забыть chmod +x — скрипт не запустится без флага исполняемости
Предупреждение: автоматический коммит без проверки содержимого
Опасность git add . в скрипте авто-коммита
Команда
Команда
git add . добавляет ВСЕ изменённые, новые и незакоммиченные файлы из текущей директории и всех поддиректорий. В скрипте автоматического коммита это означает, что без проверки могут попасть:
- Конфигурационные файлы с паролями и токенами (
.env,config.ini) - Временные файлы (
*.tmp,*.log) - Большие бинарные файлы
- Файлы с личными данными
Как защититься
1. Настроить .gitignore перед автоматизацией
# .gitignore — исключить из авто-коммита
.env
*.log
*.tmp
__pycache__/
node_modules/
*.key
*.pem
config/secrets.ini
2. Проверять git status перед запуском скрипта
# Посмотреть, что именно добавится
git status
git diff --stat
# Только потом запустить авто-коммит
./auto_commit.sh
3. Добавить вывод git status в скрипт
#!/bin/bash
if [ ! -d ".git" ]; then exit 1; fi
git add .
# Показать что добавлено (для наглядности)
echo "=== Будет закоммичено: ==="
git diff --cached --stat
echo "=========================="
if git diff-index --quiet HEAD --; then
echo "Нет изменений."
exit 0
fi
git commit -m "Автоматический коммит $(date +'%Y-%m-%d %H:%M:%S')"
echo "Изменения закоммичены."
Ошибки в скрипте копирования (copy_by_ext.sh)
1. Пробелы в именах файлов или директорий
Проблема: При использовании
for file in $matching_files файлы с пробелами в имени будут разделены на несколько «файлов».
# Проблема:
for file in $matching_files; do # "my file.txt" = "my" + "file.txt"
# Решение: использовать find с -print0 и xargs -0
find "$source_directory" -maxdepth 1 -type f -name "*.$file_extension" \
-print0 | xargs -0 -I {} cp {} "$target_directory/"
2. Расширение с точкой
# Пользователь вводит ".txt" вместо "txt"
# Проблема: find -name "*.txt" станет "**..txt"
# Добавить очистку точки в начале:
file_extension="${file_extension#.}" # удалить ведущую точку
3. Целевая директория не существует
# Вместо выхода с ошибкой — создать директорию
if [ ! -d "$target_directory" ]; then
mkdir -p "$target_directory"
echo "Создана директория: $target_directory"
fi
Ошибки в командном Git-workflow
1. Забыть git pull перед созданием ветки
# Неправильно: создать ветку от устаревшего main
git checkout -b feature/my-task # main давно обновился
# Правильно: сначала обновить main
git checkout main
git pull origin main
git checkout -b feature/my-task
2. Не сделать rebase после merge чужого PR
Ситуация: Другой участник влил свой PR в main. Ваша ветка теперь отстаёт от main. Если сделать push без rebase — возникнут конфликты при слиянии.
# Обновить main и перебазировать свою ветку
git checkout main
git pull origin main
git checkout feature/my-task
git rebase main
# При конфликтах — разрешить и продолжить
git add <conflicted-file>
git rebase --continue
3. Push без -u при первом пуше ветки
# Ошибка: "The current branch has no upstream branch"
git push # не знает куда пушить
# Правильно: первый раз указать upstream
git push -u origin feature/my-task
# Последующие разы можно просто:
git push
4. Забыть chmod +x перед запуском скрипта
# Ошибка: permission denied
./copy_by_ext.sh
# Исправление:
chmod +x copy_by_ext.sh
./copy_by_ext.sh