Цю функцію розроблено в 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 не показує dot-файли, як-от
.gitea/workflows/, і залишає їх у репозиторії без змін. Коміти з Overleaf запускають Gitea Actions, як і будь-які інші коміти.
Q&A
Чи можна виконувати force push у гілку за замовчуванням?
Чи можна виконувати force push у гілку за замовчуванням?
Відповідь: Будь ласка, залишайте force push у гілку за замовчуванням вимкненим, наприклад за допомогою правила захисту гілки. Overleaf може підхопити переписану гілку, але синхронізацію з Gitea розроблено для гілки за замовчуванням, історія якої лише зростає.
Чи підтримує синхронізація з 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.

