Эта функция разработана в ayaka-notes/ayakaleaf-pro. Она появилась в v6.3.2 как ранняя предварительная версия и будет официально выпущена в v6.4.0, поэтому её конфигурация и поведение ещё могут измениться. Если у вас возникнут проблемы, пожалуйста, сообщите нам.
Настройка синхронизации с Gitea
Создайте OAuth2-приложение в вашем экземпляре Gitea в разделе Settings → Applications → Manage OAuth2 applications (или Site Administration → Integrations → Applications для приложения на уровне всего экземпляра):- Application name: например,
Overleaf; пользователи видят это имя при авторизации приложения - Redirect URIs:
${OVERLEAF_SITE_URL}/user/gitea-sync/oauth2/callback - Confidential client: отмечено
config/variables.env
Gitea показывает эти области, когда пользователь авторизует приложение, и ограничивает ими токен.
Токены доступа Gitea истекают через час (
[oauth2] ACCESS_TOKEN_EXPIRATION_TIME). Overleaf обновляет их с помощью токена обновления, который Gitea выдаёт вместе с ними, в том числе когда Gitea делает токены обновления одноразовыми (INVALIDATE_REFRESH_TOKENS = true), поэтому пользователи остаются привязанными, пока не отвяжут учётную запись или не отзовут доступ приложения в Gitea.
Ваш экземпляр Gitea
Задайте вGITEA_SYNC_URL веб-адрес вашего экземпляра — его ROOT_URL, по которому вы открываете репозитории в браузере. Адрес REST API определяется на его основе:
Gitea, размещённый по вложенному пути, тоже поддерживается, например
GITEA_SYNC_URL=https://example.com/gitea. Задавайте GITEA_SYNC_API_URL только в том случае, если ваш экземпляр предоставляет API по другому адресу, например за API-шлюзом.
Если ваш экземпляр использует сертификат частного центра сертификации (CA), смонтируйте сертификат CA в контейнер и укажите путь к нему в
NODE_EXTRA_CA_CERTS, например NODE_EXTRA_CA_CERTS=/var/lib/overleaf/certs/gitea-ca.pem.Привязанные учётные записи и проекты относятся к тому экземпляру, с которым они были привязаны. Прежде чем переключать
GITEA_SYNC_URL на другой экземпляр, попросите пользователей отвязать свои учётные записи Gitea и проекты.GITEA_SYNC_PROXY_URL=http://10.0.0.1:10808. Это должен быть стандартный прямой HTTP/HTTPS-прокси, и он не должен использовать 127.0.0.1.
Кто может привязывать и синхронизировать
Как и в Overleaf Cloud, привязать проект к репозиторию Gitea может только владелец проекта. После привязки синхронизировать проект может любой соавтор с правами на редактирование.- Overleaf взаимодействует с Gitea от имени учётной записи Gitea пользователя, выполняющего синхронизацию, поэтому каждый соавтор, который синхронизирует проект, привязывает собственную учётную запись Gitea и должен иметь право на push в ветку по умолчанию репозитория.
- Соавторы с правами только на просмотр не могут использовать синхронизацию с Gitea для этого проекта.
- При отвязке учётной записи в Overleaf её токен забывается; в Gitea нет API для его отзыва, поэтому при желании отзовите доступ также в Gitea в разделе Settings → Applications.
Как работает синхронизация с Gitea
- Права доступа: пользователи должны иметь право на push в ветку по умолчанию привязанного репозитория. Если правило защиты ветки не позволяет пользователю выполнить push в неё, Overleaf предлагает ему связаться с владельцем проекта — так же, как в случае с репозиторием, к которому был утрачен доступ.
- Слияние: если проект изменился и в Overleaf, и в Gitea, Overleaf фиксирует свои изменения во временной ветке с именем
overleaf-YYYY-MM-DD-HHMMSSи выполняет её слияние через pull request со стилем слияния по умолчанию для репозитория, поскольку в Gitea нет API для слияния веток без него. После слияния Overleaf удаляет временную ветку; слитый pull request остаётся в репозитории в качестве записи. - Правила слияния: Overleaf никогда не обходит защиту веток репозитория. Если в pull request есть конфликт или для него требуются одобрения либо успешные проверки статуса, он остаётся открытым, и Overleaf предлагает пользователю выполнить слияние в Gitea, а затем продолжить синхронизацию.
- CI-воркфлоу: Overleaf не показывает dotfiles, такие как
.gitea/workflows/, и оставляет их в репозитории без изменений. Коммиты из Overleaf запускают Gitea Actions, как и любые другие коммиты.
Q&A
Можно ли выполнять force push в ветку по умолчанию?
Можно ли выполнять force push в ветку по умолчанию?
Ответ: Пожалуйста, оставляйте force push в ветку по умолчанию отключённым, например с помощью правила защиты ветки. Overleaf способен принять переписанную ветку, но синхронизация с Gitea рассчитана на ветку по умолчанию, история которой только растёт.
Можно ли переименовать ветку по умолчанию привязанного проекта?
Можно ли переименовать ветку по умолчанию привязанного проекта?
Ответ: Нет. Overleaf продолжает синхронизацию с той веткой, к которой был привязан проект, поэтому после переименования или удаления этой ветки синхронизация завершается ошибкой. Чтобы синхронизироваться с другой веткой, отвяжите проект, а затем импортируйте репозиторий в новый проект — он будет использовать текущую ветку по умолчанию.
Поддерживает ли синхронизация с Gitea Git LFS?
Поддерживает ли синхронизация с Gitea Git LFS?
Ответ: Нет. Проекты Overleaf не поддерживают Git Large File Storage. Файлы, отслеживаемые Git LFS, отображаются в Overleaf как файлы-указатели LFS, а не как их содержимое. Вместо этого добавляйте изображения и PDF в репозиторий напрямую.
Работает ли она с репозиториями SHA-256?
Работает ли она с репозиториями SHA-256?
Ответ: Пока нет. Overleaf сравнивает файлы по их идентификаторам SHA-1, поэтому в репозитории, созданном с форматом объектов SHA-256, каждый pull перезаписывает все файлы, даже неизменённые. Ничего не теряется, но, пожалуйста, используйте формат SHA-1 по умолчанию.
Работает ли она с Forgejo?
Работает ли она с Forgejo?
Ответ: Синхронизация с Gitea разработана и протестирована только для Gitea.

