> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Sinkronisasi GitLab

<Info>
  Fitur ini dikembangkan oleh [ayaka-notes/ayakaleaf-pro](https://github.com/ayaka-notes/ayakaleaf-pro). Fitur ini diperkenalkan sejak v6.4.0 dan versi selanjutnya, dan masih berstatus beta. Kami membutuhkan masukan Anda jika Anda mengalami masalah.
</Info>

Sinkronisasi GitLab bekerja seperti [Sinkronisasi GitHub](/id/on-premises/configuration/overleaf-toolkit/github-synchronisation): pengguna menautkan akun GitLab mereka, mengekspor proyek ke proyek GitLab baru, mengimpor repositori GitLab, dan menyinkronkan perubahan ke dua arah. Fitur ini berfungsi dengan GitLab.com dan dengan GitLab self-managed versi 15.10 atau lebih baru (Community Edition dan Enterprise Edition).

### Menyiapkan Sinkronisasi GitLab

<Warning>
  Anda perlu mengaktifkan [git-bridge](/id/on-premises/configuration/overleaf-toolkit/git-integration) terlebih dahulu sebelum menggunakan Sinkronisasi GitLab.

  ```dotenv title="config/overleaf.rc" theme={null}
  GIT_BRIDGE_ENABLED=true
  ```
</Warning>

Buat aplikasi OAuth di instans GitLab Anda, melalui *User settings → Applications* (atau *Admin area → Applications* untuk aplikasi tingkat instans):

* **Redirect URI**: `${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback`
* **Confidential**: dicentang
* **Scopes**: `api`

Salin **Application ID** dan **Secret**, lalu tambahkan pengaturan berikut ke file variabel lingkungan Overleaf Anda.

```dotenv title="config/variables.env" wrap theme={null}
# used to encrypt the user's GitLab access and refresh tokens.
# How to generate: `openssl rand -hex 32`
GITLAB_TOKEN_CIPHER_PASSWORD=0123456789ABCDEFG # changed to yours

# GitLab Sync Settings
GITLAB_SYNC_ENABLED=true
GITLAB_SYNC_CLIENT_ID=
GITLAB_SYNC_CLIENT_SECRET=

# Web address of your GitLab, defaults to https://gitlab.com
# GITLAB_SYNC_URL=https://gitlab.example.com

# OAuth callback is: ${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback
# (Optional) GITLAB_SYNC_PROXY_URL=http://10.0.0.1:10808
```

<Warning>
  Sebelum mengonfigurasi redirect URI OAuth GitLab, pastikan `OVERLEAF_SITE_URL` sudah diatur dengan benar.
</Warning>

Token akses GitLab kedaluwarsa setelah dua jam. Overleaf memperbaruinya menggunakan refresh token yang diterbitkan GitLab bersamanya, sehingga pengguna tetap tertaut hingga mereka memutuskan tautan atau mencabut aplikasi di GitLab.

### GitLab self-managed

Atur `GITLAB_SYNC_URL` ke alamat web instans Anda, yaitu alamat yang Anda gunakan untuk membuka proyek di browser. REST API diturunkan dari alamat tersebut:

| Variabel | Default |
| - | - |
| `GITLAB_SYNC_URL` | `https://gitlab.com` |
| `GITLAB_SYNC_API_URL` | `${GITLAB_SYNC_URL}/api/v4` |

Atur `GITLAB_SYNC_API_URL` hanya jika instans Anda menyajikan API di tempat lain, misalnya di belakang API gateway.

<Warning>
  * Buat aplikasi OAuth di instans yang Anda atur pada `GITLAB_SYNC_URL`; aplikasi dari `gitlab.com` tidak berfungsi di instans self-managed.
  * `GITLAB_SYNC_URL` hanya berupa alamat web. Jangan tambahkan `/api/v4` atau path grup.
</Warning>

<Info>
  Jika instans Anda menggunakan sertifikat dari CA privat, mount sertifikat CA tersebut ke dalam kontainer dan arahkan `NODE_EXTRA_CA_CERTS` ke sertifikat itu, misalnya `NODE_EXTRA_CA_CERTS=/var/lib/overleaf/certs/gitlab-ca.pem`.
</Info>

<Danger>
  Akun dan proyek yang ditautkan terikat pada instans tempat mereka ditautkan. Sebelum mengganti `GITLAB_SYNC_URL` ke instans lain, minta pengguna untuk memutuskan tautan akun GitLab dan proyek mereka.
</Danger>

Jika Anda berada di wilayah dengan akses jaringan yang dibatasi, Anda mungkin perlu mengonfigurasi proxy untuk mengakses GitLab. Atur variabel lingkungan berikut: `GITLAB_SYNC_PROXY_URL=http://10.0.0.1:10808`. Proxy tersebut harus berupa forward proxy HTTP/HTTPS standar, dan tidak boleh menggunakan `127.0.0.1`.

### Siapa yang dapat menautkan dan menyinkronkan

Seperti di Overleaf Cloud, hanya pemilik proyek yang dapat menautkan proyek ke repositori GitLab. Setelah ditautkan, setiap kolaborator dengan akses edit dapat menyinkronkannya.

| Tindakan | Siapa yang dapat melakukannya |
| - | - |
| Mengekspor proyek ke repositori GitLab baru | Pemilik proyek |
| Mengimpor repositori GitLab ke proyek baru | Pengguna mana pun, yang kemudian menjadi pemilik proyek baru |
| Pull, push, dan merge proyek yang ditautkan | Pemilik dan kolaborator dengan akses edit |
| Memutuskan tautan proyek dari repositorinya | Pemilik proyek |

* Overleaf berkomunikasi dengan GitLab menggunakan akun GitLab milik pengguna yang melakukan sinkronisasi, sehingga setiap kolaborator yang menyinkronkan menautkan akun GitLab mereka sendiri, dan harus diizinkan melakukan push ke branch default repositori.
* Kolaborator dengan akses hanya-lihat tidak dapat menggunakan Sinkronisasi GitLab untuk proyek tersebut.

### Cara kerja sinkronisasi dengan GitLab

* **Izin**: pengguna harus diizinkan melakukan push ke branch default proyek yang ditautkan. Jika branch default dilindungi dan pengguna tidak boleh melakukan push ke sana, Overleaf meminta mereka menghubungi pemilik proyek, sama seperti pada repositori yang aksesnya telah hilang.
* **Merge**: jika proyek berubah baik di Overleaf maupun di GitLab, Overleaf melakukan commit perubahannya ke branch sementara bernama `overleaf-YYYY-MM-DD-HHMMSS` dan menggabungkannya melalui merge request, karena GitLab tidak memiliki API untuk menggabungkan branch tanpa merge request. Setelah merge, Overleaf menghapus branch sementara dan merge request tersebut. Hanya administrator dan pemilik proyek yang boleh menghapus merge request di GitLab, sehingga bagi pengguna lain merge request yang sudah digabungkan tetap ada di proyek.
* **Aturan merge**: Overleaf tidak pernah melewati aturan merge proyek. Jika merge request mengalami konflik, atau memerlukan persetujuan atau pipeline yang berhasil, merge request tetap terbuka dan Overleaf meminta pengguna untuk menggabungkannya di GitLab, lalu melanjutkan sinkronisasi.
* **Pipeline**: commit dari Overleaf memicu pipeline seperti commit lainnya. Jika proyek Anda menjalankan pipeline untuk merge request dan mewajibkannya berhasil, merge dari Overleaf akan menunggu pipeline tersebut, seperti dijelaskan di atas.

### Q\&A

<Accordion title="Bisakah saya melakukan force push ke branch default?">
  <strong>Jawaban:</strong> Harap biarkan force push ke branch default tetap dinonaktifkan. Ini adalah pengaturan default GitLab: branch default dari proyek baru dilindungi dan tidak ada yang dapat melakukan force push ke sana. Overleaf dapat mengambil alih branch yang ditulis ulang, tetapi Sinkronisasi GitLab dirancang untuk branch default yang riwayatnya hanya bertambah.
</Accordion>

<Accordion title="Bisakah saya mengganti nama branch default dari proyek yang ditautkan?">
  <strong>Jawaban:</strong> Tidak. Overleaf terus melakukan sinkronisasi dengan branch tempat proyek ditautkan, sehingga sinkronisasi akan gagal setelah branch tersebut diganti namanya atau dihapus. Untuk menyinkronkan dengan branch lain, putuskan tautan proyek, lalu impor repositori ke proyek baru, yang akan menggunakan branch default saat ini.
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.