Добавить в корзинуПозвонить
Найти в Дзене
Дед в IT

Сейчас настроил push-зеркалирование из локального #gitea в #github и #gitlab — чтобы код автоматически резервировался в облаке при каждом

Сейчас настроил push-зеркалирование из локального #gitea в #github и #gitlab — чтобы код автоматически резервировался в облаке при каждом пуше. Делюсь подробностями и подводными камнями. Gitea имеет встроенную функцию Mirror Repositories. Достаточно указать URL удалённого репозитория (например, на GitHub или GitLab) и выбрать тип «Push». После этого Gitea будет автоматически пушить все изменения туда. С GitHub всё заработало почти сразу: создал пустой репозиторий, сгенерировал Personal Access Token с правами repo, подставил его в URL вида https://имя:токен@github.com/имя/репо.git — и зеркало заработало. Не забывай ставить галку про синхронизацию при добавлении коммита. С GitLab возникли сложности. Первая проблема: при попытке синхронизации Gitea выдавал ошибку, что репозиторий пустой и не имеет default branch. Оказалось, GitLab не позволяет пушить в полностью пустой репозиторий — в отличие от GitHub, он не создаёт ветку автоматически. Решение: зайти в веб-интерфейс GitLab, создать

Сейчас настроил push-зеркалирование из локального #gitea в #github и #gitlab — чтобы код автоматически резервировался в облаке при каждом пуше. Делюсь подробностями и подводными камнями.

Gitea имеет встроенную функцию Mirror Repositories. Достаточно указать URL удалённого репозитория (например, на GitHub или GitLab) и выбрать тип «Push». После этого Gitea будет автоматически пушить все изменения туда.

С GitHub всё заработало почти сразу: создал пустой репозиторий, сгенерировал Personal Access Token с правами repo, подставил его в URL вида

https://имя:токен@github.com/имя/репо.git — и зеркало заработало. Не забывай ставить галку про синхронизацию при добавлении коммита.

С GitLab возникли сложности.

Первая проблема: при попытке синхронизации Gitea выдавал ошибку, что репозиторий пустой и не имеет default branch. Оказалось, GitLab не позволяет пушить в полностью пустой репозиторий — в отличие от GitHub, он не создаёт ветку автоматически. Решение: зайти в веб-интерфейс GitLab, создать любой файл (например, .gitkeep), указав имя ветки (например, master). После этого репозиторий «ожил».

Вторая проблема: после появления ветки Gitea выдавал ошибку «You are not allowed to delete protected branches from this project». Причина в том, что Gitea при push-mirror использует git push --mirror, который требует возможности force-push. А ветка по умолчанию в GitLab защищена — и по умолчанию force-push запрещён даже для владельца через API.

Решение: в настройках репозитория в GitLab (Settings → Repository → Protected Branches) нужно включить опцию «Allow force push» для нужной ветки. Полностью отключать защиту не обязательно — достаточно этой галочки. После этого синхронизация прошла успешно.

Теперь все мои коммиты в локальный Gitea автоматически реплицируются и в GitHub, и в GitLab. Локальный сервер остаётся основным, а облака — надёжной резервной копией.

Если планируете подобную схему — учитывайте особенности GitLab: он строже к безопасности, но гибко настраивается.

#gitea #github #gitlab