mirror of
https://gitverse.ru/kpa39l/git-forge-management.git
synced 2026-09-29 09:15:05 +00:00
73 lines
2.6 KiB
Markdown
73 lines
2.6 KiB
Markdown
---
|
|
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)
|