|
|
||
|---|---|---|
| readme.md | ||
readme.md
Судя по всему, вы хотите настроить зеркало (mirror) вашего репозитория из Gitea на GitHub, но у вас на GitHub включена двухфакторная аутентификация (2FA/MFA). Встроенные возможности Gitea лучше всего подходят для этой задачи.
Есть два основных пути, которые позволяют обойти ограничения 2FA при автоматическом зеркалировании:
Способ 1: Использование Personal Access Token (PAT) GitHub (Рекомендуемый)
Это самый простой и надежный способ, так как Gitea изначально поддерживает аутентификацию по токену для HTTP-зеркал. Так как HTTP-протокол Git не поддерживает 2FA напрямую, токен служит заменой паролю .
-
Создайте токен на GitHub:
- Зайдите в настройки GitHub:
Settings→Developer settings→Personal access tokens→Tokens (classic). - Нажмите "Generate new token".
- Выберите необходимые права (
scopes). Для публичного репозитория достаточно отметить флажокpublic_repo. Если вы зеркалируете приватный репозиторий или используете GitHub Actions, вам также могут понадобиться праваrepoиworkflow. - Создайте токен и обязательно скопируйте его. GitHub покажет его только один раз.
- Зайдите в настройки GitHub:
-
Настройте зеркало в Gitea:
- В вашем репозитории на Gitea перейдите в
Настройки(Settings) →Репозиторий-зеркало(Mirror settings). - В разделе "Зеркало отправки" (Push Mirror) нажмите "Добавить новое зеркало отправки" (Add Push Mirror).
- В поле "Адрес удаленного репозитория Git" (Git Remote Repository URL) укажите:
https://github.com/<ваш_github_username>/<ваш_репозиторий>.git - В полях авторизации укажите:
- Имя пользователя (Username): Ваш GitHub username.
- Пароль (Password): Скопированный Personal Access Token.
- Настройте интервал синхронизации и сохраните зеркало.
- В вашем репозитории на Gitea перейдите в
Способ 2: Использование SSH и развернутого ключа (Deploy Key)
Этот способ предпочтительнее, если вы хотите использовать SSH-ключи и не передавать токены по сети, а также если вам нужно ограничить доступ ключа только к одному репозиторию (через deploy key) .
-
Подготовьте SSH-ключ:
- На сервере, где работает Gitea, сгенерируйте новую пару SSH-ключей (или используйте существующую), которая будет использоваться специально для зеркалирования. Обычно это делает администратор сервера.
- Например:
ssh-keygen -t ed25519 -C "gitea-mirror" -f ~/.ssh/gitea_mirror_key - Важно: Приватный ключ должен быть доступен пользователю, от которого запущен процесс Gitea.
-
Добавьте публичный ключ на GitHub как "Deploy Key":
- На GitHub перейдите в ваш репозиторий →
Settings→Deploy keys→Add deploy key. - Вставьте содержимое публичного ключа (например,
gitea_mirror_key.pub). - Дайте ключу название и обязательно отметьте галочку "Allow write access", так как зеркало будет отправлять (пушить) изменения.
- Нажмите
Add key. Использование deploy key безопаснее, так как он привязан только к одному репозиторию и не имеет доступа к вашим аккаунту или другим репозиториям .
- На GitHub перейдите в ваш репозиторий →
-
Настройте зеркало в Gitea:
- В настройках зеркала вашего Gitea-репозитория, в поле "Адрес удаленного репозитория Git" укажите SSH-адрес вашего GitHub репозитория:
git@github.com:<ваш_github_username>/<ваш_репозиторий>.git - Поля для логина и пароля оставьте пустыми. Gitea (или Forgejo) автоматически использует SSH-ключ для аутентификации, если он настроен для пользователя, от которого запущен процесс .
- Сохраните зеркало.
- В настройках зеркала вашего Gitea-репозитория, в поле "Адрес удаленного репозитория Git" укажите SSH-адрес вашего GitHub репозитория:
Альтернативный ручной способ
Если встроенная функция зеркал по каким-то причинам не подходит, вы можете настроить "ручное" зеркалирование с помощью хуков Git . Этот метод дает полный контроль, но требует доступа к командной строке сервера.
- Убедитесь, что пользователь, от которого запускается Gitea, имеет доступ к GitHub по SSH (ключ добавлен в аккаунт или как deploy key).
- В веб-интерфейсе Gitea перейдите в настройки репозитория → "Управление Git hooks" (Git Hooks).
- Отредактируйте хук
post-receiveи добавьте в него команду для пуша в GitHub:#!/usr/bin/env bash git push --mirror git@github.com:<ваш_github_username>/<ваш_репозиторий>.git
Теперь каждый раз, когда кто-то пушит в ваш репозиторий на Gitea, хук будет автоматически запускать зеркалирование на GitHub.
Какой из вариантов вам кажется более удобным? Если выберете способ с SSH-ключом, могу подсказать, где именно на сервере с Gitea его нужно сохранить.