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

# Hướng dẫn phát triển

> Hướng dẫn đóng góp cho overleaf-pro, bao gồm các ràng buộc đồng bộ repo, quy ước phân nhánh và phần hỏi đáp thường gặp về upstream/phiên bản.

### Giới thiệu

Trước khi bắt tay vào phát triển, chúng tôi mong bạn hiểu rõ những điều sau:

* Overleaf được phát triển chính thức trong một [repository nội bộ](http://github.com/overleaf/internal), và phiên bản cộng đồng được công bố tại [overleaf/overleaf](https://github.com/overleaf/overleaf). Một copybot chịu trách nhiệm đồng bộ mã nguồn giữa repository nội bộ và repository công khai.
* [Ayaka-notes/overleaf-pro](https://github.com/ayaka-notes/overleaf-pro) là một bản fork của Overleaf cộng đồng. Chúng tôi mong dự án này có thể duy trì lâu dài, vì vậy hãy tuân thủ các quy tắc trước khi đóng góp.

### Quy tắc commit

* Vui lòng không chỉnh sửa quá nhiều vào mã nguồn Overleaf hiện có. Hãy tập trung càng nhiều chức năng càng tốt vào thư mục `services/web/modules`. Điều này giúp giảm thiểu khối lượng công việc của chúng tôi khi hợp nhất và cập nhật mã sau này.
* Vibe coding thực sự là một cách rất dễ dàng, nhưng nó có thể dễ dàng làm rối dự án, khiến dự án khó bảo trì về sau, vì vậy hãy sử dụng một cách thận trọng.
* Vui lòng không thêm bất kỳ nội dung liên quan đến bản dịch nào trong quá trình phát triển; hãy sử dụng các bản dịch có sẵn bất cứ khi nào có thể.
* Tránh thêm biến môi trường trừ khi thực sự cần thiết. Nếu bắt buộc, hãy đảm bảo chúng nhất quán nhất có thể với các biến trong Overleaf toolkit hoặc [docs.overleaf.com](https://docs.overleaf.com/).

### Quy tắc nhánh

Chúng tôi sử dụng các nhánh sau cho việc phát triển overleaf-pro:

* `main`: Nhánh này chỉ dùng để đồng bộ mã từ upstream, vui lòng **KHÔNG** commit bất kỳ thay đổi bên ngoài nào. Trên nhánh này, chúng tôi sẽ đặt một số tag như `ce-v[X.x.x]`, cho biết tag này tương ứng với `v[X.x.x]` trong Overleaf Community Edition chính thức. Lưu ý: tag này là bất biến!
* `server-pro`: Nhánh mặc định cho công việc phát triển hằng ngày.
* `feature-X`: Nhánh dùng để phát triển một tính năng cụ thể.
* `release-vX.0.0`: Nhánh dành riêng cho việc phát hành, chúng tôi sẽ thực hiện một số hot-fix trước khi phát hành.

<Frame caption="Quy tắc nhánh của Overleaf Pro">
  <img src="https://mintcdn.com/ayakaleaf-pro/x9kfDjtWlyyhG_mR/images/dev/release-model.png?fit=max&auto=format&n=x9kfDjtWlyyhG_mR&q=85&s=8a10a259ff5a6437cb05f03560a5dc2c" alt="" width="5652" height="2544" data-path="images/dev/release-model.png" />
</Frame>

### GitHub Action

[GitHub Action](https://github.com/ayaka-notes/overleaf-pro/actions) chịu trách nhiệm CI/CD tự động, bao gồm:

* Cập nhật nhánh main hằng đêm
* Build docker image cho phát triển
* Phát hành docker image

### Hỏi & Đáp

<Accordion title="Làm thế nào để tìm commit hash của Overleaf Community Edition `X.0.0`?">
  Trước hết, bạn cần pull docker image và chạy lệnh sau để kiểm tra các label trong docker image này:

  ```shellscript title="bash" wrap theme={null}
  docker inspect --format='{{json .Config.Labels}}' sharelatex/sharelatex:6.0.0
  {"com.overleaf.ce.revision":"b0d05c0cf0750714e1f467d20ed6c5f5e9467e8f","org.opencontainers.image.ref.name":"ubuntu","org.opencontainers.image.version":"24.04"}
  ```

  Sau đó, bạn có thể kiểm tra xem [commit (b0d05c0)](https://github.com/overleaf/overleaf/commit/b0d05c0cf0750714e1f467d20ed6c5f5e9467e8f) có tồn tại trong nhánh master của upstream hay không.
</Accordion>

<Accordion title="Tại sao commit hash trong image CE giống nhau giữa `6.0.0` và `6.0.1`?">
  Đây là hành vi được dự kiến. Bản phát hành 6.0.1 là một bản vá nhỏ được xây dựng dựa trên image 6.0.0. Các thay đổi được áp dụng bằng cách vá image 6.0.0 hiện có, thay vì build lại image từ một commit mới. Do đó, commit hash bên trong image giống hệt nhau giữa 6.0.0 và 6.0.1.

  Để biết thông tin chi tiết, xem [hotfix](https://github.com/overleaf/overleaf/tree/main/server-ce/hotfix).
</Accordion>


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