Эта функция разработана в ayaka-notes/ayakaleaf-pro. Она доступна начиная с версии v6.4.0 и всё ещё находится в статусе бета. Если у вас возникнут проблемы, пожалуйста, сообщите нам.
Настройка синхронизации с GitLab
Создайте OAuth-приложение в вашем экземпляре GitLab в разделе User settings → Applications (или Admin area → Applications для приложения на уровне всего экземпляра):- Redirect URI:
${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback - Confidential: отмечено
- Scopes:
api
config/variables.env
Самостоятельно размещённый GitLab
Задайте вGITLAB_SYNC_URL веб-адрес вашего экземпляра — тот, по которому вы открываете проекты в браузере. Адрес REST API определяется на его основе:
Задавайте
GITLAB_SYNC_API_URL только в том случае, если ваш экземпляр предоставляет API по другому адресу, например за API-шлюзом.
Если ваш экземпляр использует сертификат частного центра сертификации (CA), смонтируйте сертификат CA в контейнер и укажите путь к нему в
NODE_EXTRA_CA_CERTS, например NODE_EXTRA_CA_CERTS=/var/lib/overleaf/certs/gitlab-ca.pem.Привязанные учётные записи и проекты относятся к тому экземпляру, с которым они были привязаны. Прежде чем переключать
GITLAB_SYNC_URL на другой экземпляр, попросите пользователей отвязать свои учётные записи GitLab и проекты.GITLAB_SYNC_PROXY_URL=http://10.0.0.1:10808. Это должен быть стандартный прямой HTTP/HTTPS-прокси, и он не должен использовать 127.0.0.1.
Кто может привязывать и синхронизировать
Как и в Overleaf Cloud, привязать проект к репозиторию GitLab может только владелец проекта. После привязки синхронизировать проект может любой соавтор с правами на редактирование.- Overleaf взаимодействует с GitLab от имени учётной записи GitLab пользователя, выполняющего синхронизацию, поэтому каждый соавтор, который синхронизирует проект, привязывает собственную учётную запись GitLab и должен иметь право на push в ветку по умолчанию репозитория.
- Соавторы с правами только на просмотр не могут использовать синхронизацию с GitLab для этого проекта.
Как работает синхронизация с GitLab
- Права доступа: пользователи должны иметь право на push в ветку по умолчанию привязанного проекта. Если ветка по умолчанию защищена и пользователю запрещён push в неё, Overleaf предлагает ему связаться с владельцем проекта — так же, как в случае с репозиторием, к которому был утрачен доступ.
- Слияние: если проект изменился и в Overleaf, и в GitLab, Overleaf фиксирует свои изменения во временной ветке с именем
overleaf-YYYY-MM-DD-HHMMSSи выполняет её слияние через merge request, поскольку в GitLab нет API для слияния веток без него. После слияния Overleaf удаляет временную ветку и merge request. Удалять merge request в GitLab могут только администраторы и владельцы проекта, поэтому для остальных пользователей слитый merge request остаётся в проекте. - Правила слияния: Overleaf никогда не обходит правила слияния проекта. Если в merge request есть конфликт или для него требуется одобрение либо успешный pipeline, он остаётся открытым, и Overleaf предлагает пользователю выполнить слияние в GitLab, а затем продолжить синхронизацию.
- Pipelines: коммиты из Overleaf запускают pipelines, как и любые другие коммиты. Если в вашем проекте pipelines запускаются для merge request и их успешное прохождение обязательно, слияния из Overleaf ожидают их завершения, как описано выше.
Q&A
Можно ли выполнять force push в ветку по умолчанию?
Можно ли выполнять force push в ветку по умолчанию?
Ответ: Пожалуйста, оставляйте force push в ветку по умолчанию отключённым. Это поведение GitLab по умолчанию: ветка по умолчанию нового проекта защищена, и никто не может выполнять в неё force push. Overleaf способен принять переписанную ветку, но синхронизация с GitLab рассчитана на ветку по умолчанию, история которой только растёт.
Можно ли переименовать ветку по умолчанию привязанного проекта?
Можно ли переименовать ветку по умолчанию привязанного проекта?
Ответ: Нет. Overleaf продолжает синхронизацию с той веткой, к которой был привязан проект, поэтому после переименования или удаления этой ветки синхронизация завершается ошибкой. Чтобы синхронизироваться с другой веткой, отвяжите проект, а затем импортируйте репозиторий в новый проект — он будет использовать текущую ветку по умолчанию.

