この機能は ayaka-notes/ayakaleaf-pro によって開発されたものです。v6.4.0 以降で導入されています。まだベータ版のため、問題があればぜひフィードバックをお寄せください。
GitLab 同期のセットアップ
GitLab インスタンスの User settings → Applications(インスタンス全体のアプリケーションの場合は Admin area → Applications)で OAuth アプリケーションを作成します。- Redirect URI:
${OVERLEAF_SITE_URL}/user/gitlab-sync/oauth2/callback - Confidential: チェックを入れる
- Scopes:
api
config/variables.env
セルフマネージド GitLab
GITLAB_SYNC_URL にインスタンスの Web アドレス(ブラウザーでプロジェクトを開く際のアドレス)を設定します。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 アカウントを連携し、リポジトリのデフォルトブランチへのプッシュが許可されている必要があります。
- 閲覧のみの共同編集者は、そのプロジェクトで GitLab 同期を使用できません。
GitLab での同期の仕組み
- 権限: ユーザーは、連携されたプロジェクトのデフォルトブランチへのプッシュが許可されている必要があります。デフォルトブランチが保護されていてユーザーがプッシュできない場合、アクセス権を失ったリポジトリの場合と同様に、Overleaf はプロジェクトのオーナーに連絡するよう求めます。
- マージ: Overleaf と GitLab の両方でプロジェクトが変更された場合、GitLab にはマージリクエストなしでブランチをマージする API がないため、Overleaf は変更を
overleaf-YYYY-MM-DD-HHMMSSという名前の一時ブランチにコミットし、マージリクエストを通じてマージします。マージ後、Overleaf は一時ブランチとマージリクエストを削除します。GitLab でマージリクエストを削除できるのは管理者とプロジェクトのオーナーのみのため、それ以外のユーザーの場合、マージ済みのマージリクエストはプロジェクトに残ります。 - マージルール: Overleaf がプロジェクトのマージルールを回避することはありません。マージリクエストにコンフリクトがある場合、または承認やパイプラインの成功が必要な場合、マージリクエストはオープンのまま残り、Overleaf はユーザーに GitLab でマージしてから同期を続行するよう求めます。
- パイプライン: Overleaf からのコミットは、他のコミットと同様にパイプラインを起動します。プロジェクトでマージリクエストに対してパイプラインを実行し、その成功を必須としている場合、上記のとおり Overleaf からのマージはパイプラインの完了を待ちます。
Q&A
デフォルトブランチに強制プッシュできますか?
デフォルトブランチに強制プッシュできますか?
回答: デフォルトブランチへの強制プッシュは無効のままにしてください。これは GitLab のデフォルト設定で、新しいプロジェクトのデフォルトブランチは保護されており、誰も強制プッシュできません。Overleaf は書き換えられたブランチを引き継ぐことができますが、GitLab 同期は履歴が増えていくだけのデフォルトブランチを前提に設計されています。
連携済みプロジェクトのデフォルトブランチ名を変更できますか?
連携済みプロジェクトのデフォルトブランチ名を変更できますか?
回答: できません。Overleaf はプロジェクトを連携したときのブランチと同期し続けるため、そのブランチ名が変更または削除されると同期は失敗します。別のブランチと同期するには、プロジェクトの連携を解除してから、リポジトリを新しいプロジェクトにインポートしてください。新しいプロジェクトでは現在のデフォルトブランチが使用されます。

