> ## 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.

# Tích hợp Git

> Cho phép người dùng clone, pull và push dự án của họ bằng Git thông qua git-bridge.

Hiện tại, tích hợp Git có trên [ayaka-notes/overleaf](https://github.com/ayaka-notes/overleaf).

> [!NOTE]
>
> Tính năng này ban đầu được phát triển bởi [ayaka-notes/ayakaleaf-pro](https://github.com/ayaka-notes/ayakaleaf-pro).

**1. Bật git-bridge (chỉ dành cho người dùng Toolkit)**

Nếu bạn đang dùng Toolkit, hãy bật `git-bridge` bằng cách đặt giá trị sau trong `config/overleaf.rc`:

```text title="config/overleaf.rc" theme={null}
GIT_BRIDGE_ENABLED=true
```

Toolkit sẽ bỏ qua thiết lập này trừ khi `SERVER_PRO=true` cũng được đặt. Không cần làm gì thêm: Toolkit tự đặt `GIT_BRIDGE_HOST`, `GIT_BRIDGE_PORT` và `V1_HISTORY_URL` cho container `sharelatex`, vì vậy hãy bỏ qua hai bước Docker Compose bên dưới. Chạy `bin/up` để tạo lại các container.

**2. Thêm container git-bridge (chỉ dành cho người dùng Docker-compose)**

Đối với người dùng chạy tệp `docker-compose.yml` tùy chỉnh, hãy thêm cấu hình container sau vào tệp compose của bạn:

```yaml title="docker-compose.yml (git-bridge service)" wrap theme={null}
git-bridge:
    restart: always
    image: ghcr.io/ayaka-notes/overleaf-pro/git-bridge:6.3.2 # tag should match the `sharelatex` container tag
    volumes:
        - ~/git_bridge_data:/data/git-bridge
    container_name: git-bridge
    expose:
        - "8000"
    environment:
        GIT_BRIDGE_API_BASE_URL: "http://sharelatex:3000/api/v0/" 
        GIT_BRIDGE_OAUTH2_SERVER: "http://sharelatex"
        GIT_BRIDGE_POSTBACK_BASE_URL: "http://git-bridge:8000"
        GIT_BRIDGE_ROOT_DIR: "/data/git-bridge"
    user: root
    command: ["/server-pro-start.sh"]
```

Hãy dùng cùng tag với image `sharelatex`. [MCP Server](https://ayakaleaf-pro.mintlify.site/vi/on-premises/configuration/overleaf-toolkit/integrations/mcp-server.md) (v6.3.1 trở lên) là một phần của image `sharelatex` và được bật cùng với tích hợp Git, vì vậy không cần thêm container nào.

**3. Cập nhật cấu hình container sharelatex**

Bạn cũng cần liên kết container `git-bridge` trong container `sharelatex` và định nghĩa các biến môi trường sau; hãy đặc biệt chú ý đến `V1_HISTORY_URL`:

```yaml title="docker-compose.yml (sharelatex service)" theme={null}
sharelatex:
    links:
        - git-bridge
    environment:
         GIT_BRIDGE_ENABLED: true
         GIT_BRIDGE_HOST: "git-bridge"
         GIT_BRIDGE_PORT: "8000"
         # We use v1 now, if you used to set V1_HISTORY_URL, please update now
         V1_HISTORY_URL: "http://sharelatex:3100/api"
```

**4. Xác thực**

Khi xác thực một git client, người dùng cần có Personal Access Token. Người dùng có thể quản lý Personal Access Token thông qua giao diện ứng dụng (xem tài liệu):

![](https://mintcdn.com/ayakaleaf-pro/UZ_4Jfz7cU6MnXtE/images/on-premises/image-29.png?fit=max\&auto=format\&n=UZ_4Jfz7cU6MnXtE\&q=85\&s=39af379b36baaa023f7cff66dc2dba76)

Personal Access Token cho tích hợp Git

**5. Giám sát và lưu ý về tài nguyên**

Chúng tôi khuyên bạn nên giám sát tài nguyên của máy chủ host sau khi bật `git-bridge`. Mức tải tăng thêm sẽ phụ thuộc vào:

* số lượng người dùng sử dụng tính năng này
* loại dự án được lưu trữ trên phiên bản của bạn (các dự án lớn hơn thường tiêu tốn nhiều tài nguyên hơn)

### Chuyển (swap) dự án sang S3

Tích hợp Git lưu trữ một kho git hoàn chỉnh trên đĩa cho mỗi dự án được người dùng clone. Nếu dung lượng đĩa có hạn, bạn có thể kích hoạt một tác vụ swap để chuyển các kho ít được sử dụng sang AWS S3. Nếu một kho đã bị swap được cần đến lần nữa, nó sẽ được chuyển trở lại đĩa. Các biến môi trường sau điều khiển tác vụ swap:

| Tên | Mô tả |
| - | - |
| `GIT_BRIDGE_SWAPSTORE_TYPE` | Đặt giá trị này thành "s3" để kích hoạt tác vụ swap. |
| `GIT_BRIDGE_SWAPSTORE_AWS_ACCESS_KEY` | AWS access key của bạn |
| `GIT_BRIDGE_SWAPSTORE_AWS_SECRET` | AWS secret của bạn |
| `GIT_BRIDGE_SWAPSTORE_S3_BUCKET_NAME` | Bucket này sẽ chứa các kho git đã được nén zip |
| `GIT_BRIDGE_SWAPSTORE_AWS_REGION` | Region của bucket |
| `GIT_BRIDGE_SWAPJOB_MIN_PROJECTS` | Số lượng dự án tối thiểu cần giữ trên đĩa. **- Mặc định:** 50 |
| `GIT_BRIDGE_SWAPJOB_LOW_GIB` | Ngưỡng thấp cho việc swap. Tác vụ swap sẽ chuyển dự án cho đến khi dung lượng đĩa sử dụng thấp hơn giá trị này. **- Mặc định:** 128 GB |
| `GIT_BRIDGE_SWAPJOB_HIGH_GIB` | Ngưỡng cao cho việc swap. Tác vụ swap sẽ bắt đầu khi dung lượng đĩa sử dụng đạt đến giá trị này. **- Mặc định:** 256 GB |
| `GIT_BRIDGE_SWAPJOB_INTERVAL_MILLIS` | Khoảng thời gian giữa các lần kiểm tra dung lượng đĩa và chạy tác vụ swap. **- Mặc định:** 3600000 ms = 1 giờ |

### Hỏi & Đáp

> [accordion] Nếu tôi chia sẻ dự án với người khác, mô hình phân quyền của Git Bridge hoạt động như thế nào?
>
> Người dùng chỉ có quyền đọc chỉ có thể clone dự án; người dùng có quyền đọc-ghi có thể clone và push dự án. Lưu ý: Người dùng cần đăng nhập để tham gia dự án này.

> [accordion] Làm thế nào để clone một dự án, và tôi dùng tên người dùng và mật khẩu nào?
>
> Trong trình soạn thảo, hãy mở **Integrations** ở thanh bên trái và nhấp vào **Git integration**. Mục này hiển thị lệnh clone, có dạng:
>
> ```sh theme={null}
> git clone https://<your-overleaf>/git/<project_id>
> ```
>
> Khi Git yêu cầu thông tin đăng nhập, hãy nhập `git` làm tên người dùng và một Personal Access Token làm mật khẩu. Hãy tạo token trong **Account Settings**; token có hiệu lực trong một năm. Mật khẩu tài khoản của bạn sẽ không hoạt động.
>
> Các thay đổi không được đồng bộ tự động: hãy dùng `git pull` để lấy các thay đổi được thực hiện trong trình soạn thảo và `git push` để gửi thay đổi của bạn. Đường dẫn `/git` được phục vụ bởi container `sharelatex`, vì vậy reverse proxy đứng trước nó không cần thêm quy tắc nào.

> [accordion] `git push` thất bại với lỗi `HTTP 413` hoặc `curl 55 Broken pipe`
>
> Lần push lớn hơn giới hạn kích thước tải lên, được đặt bởi `MAX_UPLOAD_SIZE` (tính bằng megabyte, mặc định `50`) và cũng áp dụng cho các lần push. Hãy tăng giá trị này trong `config/variables.env`, ví dụ `MAX_UPLOAD_SIZE=200`, rồi chạy `bin/up -d`. Nếu bạn dùng [TLS proxy](https://ayakaleaf-pro.mintlify.site/vi/on-premises/configuration/overleaf-toolkit/tls-proxy.md) hoặc reverse proxy của riêng bạn, hãy tăng cả `client_max_body_size` của nó (`50M` trong `config/nginx/nginx.conf` của Toolkit).
>
> git-bridge cũng từ chối các tệp lớn hơn 50 MB và các dự án có hơn 2.000 tệp. Các giới hạn này được đặt bởi `GIT_BRIDGE_REPOSTORE_MAX_FILE_SIZE` (tính bằng byte) và `GIT_BRIDGE_REPOSTORE_MAX_FILE_NUM` trong `config/variables.env`.

> [accordion] Log của git-bridge hiển thị `Failed to fetch log level`
>
> Cảnh báo này vô hại, và clone, pull, push vẫn hoạt động bình thường. Trong 6.2.x, git-bridge hỏi metadata server của Google Cloud (`metadata.google.internal`) về mức log mỗi phút một lần, điều chỉ hoạt động trên Google Cloud. Ở những nơi khác, yêu cầu thất bại, git-bridge ghi log lỗi (chẳng hạn `null` hoặc một mã trạng thái HTTP) và giữ mức log từ `GIT_BRIDGE_LOG_LEVEL`. Từ 6.3.0, việc kiểm tra này bị tắt, và việc nâng cấp cũng cập nhật image git-bridge, có phiên bản theo image chính.

> [accordion] Tôi có cần dịch vụ track-changes hoặc `OVERLEAF_IS_SERVER_PRO=true` cho Git và lịch sử dự án đầy đủ không?
>
> **Trả lời:** Không. Ayakaleaf Pro không có dịch vụ track-changes. Lịch sử dự án được lưu giữ bởi các dịch vụ `project-history` và `history-v1`, luôn chạy bên trong container `sharelatex`. git-bridge đọc lịch sử từ `history-v1` tại `V1_HISTORY_URL` (`http://sharelatex:3100/api`), giá trị do Toolkit đặt. Đừng đặt `OVERLEAF_IS_SERVER_PRO`: không có tính năng nào phụ thuộc vào biến này, nó chỉ chuyển các database migration chạy lúc khởi động sang bộ dành cho Server Pro.


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