Deze functie is ontwikkeld door ayaka-notes/ayakaleaf-pro. Ze is geïntroduceerd in v6.4.0 en latere versies. Ze bevindt zich nog in de bètafase. We horen graag je feedback als je problemen hebt.
GitLab-synchronisatie instellen
Maak een OAuth-applicatie aan op je GitLab-instantie, onder User settings → Applications (of Admin area → Applications voor een applicatie voor de hele instantie):- Redirect URI:
${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback - Confidential: aangevinkt
- Scopes:
api
config/variables.env
Zelfbeheerde GitLab
StelGITLAB_SYNC_URL in op het webadres van je instantie, het adres waarmee je projecten in de browser opent. De REST API wordt daarvan afgeleid:
Stel
GITLAB_SYNC_API_URL alleen in wanneer je instantie de API ergens anders aanbiedt, bijvoorbeeld achter een API-gateway.
Als je instantie een certificaat van een private CA gebruikt, koppel het CA-certificaat dan in de container en laat
NODE_EXTRA_CA_CERTS ernaar verwijzen, bijvoorbeeld NODE_EXTRA_CA_CERTS=/var/lib/overleaf/certs/gitlab-ca.pem.Gekoppelde accounts en projecten horen bij de instantie waarmee ze zijn gekoppeld. Vraag gebruikers om de koppeling van hun GitLab-account en projecten te verbreken voordat je
GITLAB_SYNC_URL naar een andere instantie overzet.GITLAB_SYNC_PROXY_URL=http://10.0.0.1:10808. Dit moet een standaard HTTP/HTTPS-forwardproxy zijn en mag geen 127.0.0.1 gebruiken.
Wie kan koppelen en synchroniseren
Net als bij Overleaf Cloud kan alleen de projecteigenaar een project aan een GitLab-repository koppelen. Zodra het gekoppeld is, kan elke medewerker met bewerkrechten het synchroniseren.- Overleaf communiceert met GitLab via het GitLab-account van de gebruiker die synchroniseert. Elke medewerker die synchroniseert, koppelt dus zijn eigen GitLab-account en moet naar de standaardbranch van de repository mogen pushen.
- Medewerkers met alleen leesrechten kunnen GitLab-synchronisatie niet voor het project gebruiken.
Hoe synchroniseren met GitLab werkt
- Rechten: gebruikers moeten naar de standaardbranch van het gekoppelde project mogen pushen. Wanneer de standaardbranch beschermd is en de gebruiker er niet naar mag pushen, vraagt Overleaf hem contact op te nemen met de projecteigenaar, net als bij een repository waartoe hij geen toegang meer heeft.
- Mergen: wanneer een project zowel in Overleaf als in GitLab is gewijzigd, commit Overleaf zijn wijzigingen naar een tijdelijke branch met de naam
overleaf-YYYY-MM-DD-HHMMSSen merget deze via een merge request, omdat GitLab geen API heeft om branches zonder merge request te mergen. Na de merge verwijdert Overleaf de tijdelijke branch en het merge request. Alleen beheerders en projecteigenaren mogen merge requests in GitLab verwijderen, dus voor andere gebruikers blijft het gemergede merge request in het project staan. - Mergeregels: Overleaf omzeilt nooit de mergeregels van het project. Wanneer het merge request een conflict heeft, of een goedkeuring of een geslaagde pipeline vereist, blijft het open en vraagt Overleaf de gebruiker het in GitLab te mergen en daarna verder te synchroniseren.
- Pipelines: commits vanuit Overleaf starten pipelines zoals elke andere commit. Als je project pipelines voor merge requests uitvoert en vereist dat ze slagen, wachten merges vanuit Overleaf daarop, zoals hierboven beschreven.
Q&A
Kan ik force pushen naar de standaardbranch?
Kan ik force pushen naar de standaardbranch?
Antwoord: Houd force pushes naar de standaardbranch uitgeschakeld. Dit is de standaardinstelling van GitLab: de standaardbranch van een nieuw project is beschermd en niemand kan ernaar force pushen. Overleaf kan een herschreven branch overnemen, maar GitLab-synchronisatie is ontworpen voor een standaardbranch waarvan de geschiedenis alleen groeit.
Kan ik de standaardbranch van een gekoppeld project hernoemen?
Kan ik de standaardbranch van een gekoppeld project hernoemen?
Antwoord: Nee. Overleaf blijft synchroniseren met de branch waaraan het project is gekoppeld, dus synchronisaties mislukken zodra die branch is hernoemd of verwijderd. Om met een andere branch te synchroniseren, verbreek je de koppeling van het project en importeer je de repository vervolgens in een nieuw project, dat de huidige standaardbranch gebruikt.

