Ta funkcja została opracowana przez ayaka-notes/ayakaleaf-pro. Jest dostępna od wersji v6.4.0. Nadal znajduje się w fazie beta. Jeśli napotkasz jakiekolwiek problemy, prosimy o opinię.
Konfiguracja synchronizacji z GitLab
Utwórz aplikację OAuth w swojej instancji GitLab, w sekcji User settings → Applications (lub Admin area → Applications w przypadku aplikacji dla całej instancji):- Redirect URI:
${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback - Confidential: zaznaczone
- Scopes:
api
config/variables.env
Samodzielnie zarządzany GitLab
UstawGITLAB_SYNC_URL na adres internetowy swojej instancji, czyli ten, pod którym otwierasz projekty w przeglądarce. Adres REST API jest z niego wyprowadzany:
Ustawiaj
GITLAB_SYNC_API_URL tylko wtedy, gdy Twoja instancja udostępnia API pod innym adresem, na przykład za bramą API.
Jeśli Twoja instancja używa certyfikatu wystawionego przez prywatny urząd certyfikacji (CA), zamontuj certyfikat CA w kontenerze i wskaż go w
NODE_EXTRA_CA_CERTS, np. NODE_EXTRA_CA_CERTS=/var/lib/overleaf/certs/gitlab-ca.pem.Połączone konta i projekty należą do instancji, z którą zostały połączone. Przed przełączeniem
GITLAB_SYNC_URL na inną instancję poproś użytkowników o odłączenie ich kont GitLab i projektów.GITLAB_SYNC_PROXY_URL=http://10.0.0.1:10808. Musi to być standardowy serwer proxy przekazujący HTTP/HTTPS i nie może używać 127.0.0.1.
Kto może łączyć i synchronizować
Podobnie jak w Overleaf Cloud, tylko właściciel projektu może połączyć projekt z repozytorium GitLab. Po połączeniu każdy współpracownik z uprawnieniami do edycji może go synchronizować.- Overleaf komunikuje się z GitLab przy użyciu konta GitLab użytkownika, który synchronizuje, więc każdy synchronizujący współpracownik łączy własne konto GitLab i musi mieć uprawnienia do wypychania zmian do domyślnej gałęzi repozytorium.
- Współpracownicy z dostępem tylko do odczytu nie mogą korzystać z synchronizacji z GitLab w danym projekcie.
Jak działa synchronizacja z GitLab
- Uprawnienia: użytkownicy muszą mieć uprawnienia do wypychania zmian do domyślnej gałęzi połączonego projektu. Gdy domyślna gałąź jest chroniona, a użytkownik nie może do niej wypychać zmian, Overleaf prosi go o kontakt z właścicielem projektu, tak jak w przypadku repozytorium, do którego utracił dostęp.
- Scalanie: gdy projekt zmienił się zarówno w Overleaf, jak i w GitLab, Overleaf zatwierdza swoje zmiany w tymczasowej gałęzi o nazwie
overleaf-YYYY-MM-DD-HHMMSSi scala ją za pomocą merge requestu, ponieważ GitLab nie udostępnia API do scalania gałęzi bez niego. Po scaleniu Overleaf usuwa tymczasową gałąź i merge request. W GitLab tylko administratorzy i właściciele projektów mogą usuwać merge requesty, więc w przypadku innych użytkowników scalony merge request pozostaje w projekcie. - Reguły scalania: Overleaf nigdy nie omija reguł scalania projektu. Gdy merge request ma konflikt albo wymaga zatwierdzenia lub pomyślnie zakończonego potoku, pozostaje otwarty, a Overleaf prosi użytkownika o scalenie go w GitLab, a następnie o kontynuowanie synchronizacji.
- Potoki: commity z Overleaf uruchamiają potoki tak jak każdy inny commit. Jeśli Twój projekt uruchamia potoki dla merge requestów i wymaga ich pomyślnego zakończenia, scalenia z Overleaf czekają na nie, jak opisano powyżej.
Pytania i odpowiedzi
Czy mogę wymusić wypchnięcie (force push) do domyślnej gałęzi?
Czy mogę wymusić wypchnięcie (force push) do domyślnej gałęzi?
Odpowiedź: Prosimy o pozostawienie wyłączonej możliwości wymuszonego wypychania do domyślnej gałęzi. Jest to domyślne ustawienie GitLab: domyślna gałąź nowego projektu jest chroniona i nikt nie może wymusić do niej wypchnięcia. Overleaf potrafi przejąć przepisaną gałąź, ale synchronizacja z GitLab jest zaprojektowana dla domyślnej gałęzi, której historia tylko rośnie.
Czy mogę zmienić nazwę domyślnej gałęzi połączonego projektu?
Czy mogę zmienić nazwę domyślnej gałęzi połączonego projektu?
Odpowiedź: Nie. Overleaf nadal synchronizuje się z gałęzią, z którą projekt został połączony, więc synchronizacje kończą się niepowodzeniem, gdy nazwa tej gałęzi zostanie zmieniona lub gałąź zostanie usunięta. Aby synchronizować z inną gałęzią, odłącz projekt, a następnie zaimportuj repozytorium do nowego projektu, który będzie używał bieżącej domyślnej gałęzi.

