4.0 KiB
4.0 KiB
Git Hooks для Gitea 111
Автоматическая синхронизация с GitHub после push в Gitea.
📁 Файлы
- post-receive - Hook для автоматического push в GitHub
🚀 Установка
1. Найдите путь к репозиторию на сервере Gitea
# Обычно это один из путей:
/var/lib/gitea/data/gitea-repositories/username/configure_nginx_manager.git
# или
/home/git/gitea-repositories/username/configure_nginx_manager.git
2. Скопируйте hook
# На сервере Gitea
cd /path/to/gitea-repositories/username/configure_nginx_manager.git/hooks/
# Скопируйте файл
cp /path/to/this/repo/gitea-hooks/post-receive ./
# Или загрузите напрямую
wget https://raw.githubusercontent.com/username/configure_nginx_manager/main/gitea-hooks/post-receive
3. Настройте hook
nano post-receive
Измените:
GITHUB_REPO="git@github.com:YOUR_USERNAME/configure_nginx_manager.git"
4. Сделайте исполняемым
chmod +x post-receive
chown git:git post-receive
5. Создайте директорию для логов
mkdir -p /var/log/gitea
chown git:git /var/log/gitea
🔑 Настройка аутентификации
Вариант A: SSH (Рекомендуется)
# На сервере Gitea под пользователем git
sudo su - git
ssh-keygen -t ed25519 -C "gitea-sync"
# Скопируйте публичный ключ
cat ~/.ssh/id_ed25519.pub
# Добавьте на GitHub:
# Settings → SSH and GPG keys → New SSH key
# Проверьте
ssh -T git@github.com
Вариант B: HTTPS с токеном
-
Создайте Personal Access Token на GitHub
- Settings → Developer settings → Personal access tokens
- Scope:
repo
-
Используйте в hook:
GITHUB_REPO="https://YOUR_TOKEN@github.com/username/configure_nginx_manager.git"
✅ Проверка
# Тестовый push
cd /tmp
git clone http://gitea.example.com/username/configure_nginx_manager.git
cd configure_nginx_manager
echo "test" >> README.md
git add README.md
git commit -m "Test sync"
git push
# Проверьте лог
tail -f /var/log/gitea/github-sync.log
# Проверьте GitHub - изменения должны появиться через 1-2 секунды
📊 Что делает hook
- ✅ Отслеживает push в ветки
mainиmaster - ✅ Автоматически пушит в GitHub
- ✅ Синхронизирует теги
- ✅ Логирует все операции
- ✅ Показывает красивый вывод с эмодзи
🐛 Устранение проблем
Hook не срабатывает
# Проверьте права
ls -la post-receive
# Должно быть: -rwxr-xr-x
# Проверьте владельца
chown git:git post-receive
# Проверьте синтаксис
bash -n post-receive
Permission denied
# Для SSH
ssh -T git@github.com
# Проверьте права на ключ
chmod 600 ~/.ssh/id_ed25519
# Для HTTPS - проверьте токен
Не находит git
# Добавьте PATH в начало hook:
export PATH=/usr/bin:/usr/local/bin:$PATH
📝 Логи
# Просмотр логов синхронизации
tail -f /var/log/gitea/github-sync.log
# Очистка старых логов
> /var/log/gitea/github-sync.log
🔄 Альтернативы
Если Git Hook не подходит, см. другие методы в GITEA_SYNC.md:
- GitHub Actions (каждый час)
- Gitea Mirror (встроенная функция)
- Двойной remote (локально)
См. также: GITEA_SYNC.md для подробной документации