--- name: git-forge-management title: "Git Forge Management (Self-Hosted)" description: "Управление проектами на self-hosted forges (Gitea, GitLab CE) — создание репозиториев, push, mirroring между форджами. Дополняет github-repo-management для не-GitHub платформ." --- ## Общий шаблон Самодельный forge (Gitea, GitLab CE) даёт REST API, совместимый с GitHub по структуре эндпоинтов, но требует Basic Auth (user:password) вместо Bearer-токена. ```bash AUTH="-u username:password" BASE="https://gitea.example.com/api/v1" ``` ## Шаг 1: Создать репозиторий через API ```bash curl -s -X POST "${BASE}/user/repos" \ ${AUTH} \ -H "Content-Type: application/json" \ -d '{ "name": "repo-name", "description": "Описание", "private": false, "auto_init": false }' ``` HTTP 201 = создан. HTTP 409 = уже существует. ## Шаг 2: Push локального проекта ```bash cd /path/to/project git init git config user.name "username" git config user.email "user@example.com" git remote add origin "https://user:password@gitea.example.com/user/repo-name.git" git add -A git commit -m "Initial commit" git push -u origin master ``` **Важно:** Gitea по умолчанию использует ветку `master`. Если forge создал `main` — переименовать локальную. ## Шаг 3: Push mirror на другой forge Push mirror настраивается в **Settings → Git Hooks/Mirrors → Add Push Mirror** в UI Gitea. Через API: ```bash curl -s -X PATCH "${BASE}/repos/user/repo-name" \ ${AUTH} \ -H "Content-Type: application/json" \ -d '{ "mirror_interval": "8h", "mirror_address": "https://token@gitverse.ru/user/repo-name.git" }' ``` Требуется: репозиторий на целевом forge уже существует. ## Критические правила - **НИКОГДА** не удалять cronjob, когда пользователь говорит "stop reminder" — только `deliver: local`. - **НИКОГДА** не удалять файлы пользователя без явного подтверждения. - Пароли и токены не сохранять в коде, только передавать через переменные или одноразовый `-u`. ## Связанные навыки - `github-repo-management` — для GitHub (gh CLI, GitHub API)