> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/vi/co-so-tri-thuc/040-git-integration.md).

# tích hợp Git

**Tích hợp Git của Overleaf** là một [tính năng cao cấp](/latex/vi/co-so-tri-thuc/120-overleaf-premium-features.md). Các tính năng cao cấp của Overleaf có sẵn cho người tham gia trong [Overleaf Commons](https://www.overleaf.com/for/universities), thành viên của nhóm [các gói đăng ký](https://www.overleaf.com/for/groups), và chủ sở hữu của các [các gói đăng ký](https://www.overleaf.com/user/subscription/plans). Tích hợp Git khả dụng trên Overleaf Cloud và Overleaf Server Pro (phiên bản 4.0 trở lên).

### Tích hợp Git của Overleaf là gì?

Tích hợp Git của Overleaf cho phép bạn lấy một URL Git từ dự án Overleaf của mình và coi nó như một kho lưu trữ Git từ xa (repo). Bạn có thể sao chép dự án của mình vào một kho lưu trữ Git cục bộ và làm việc trên dự án đó tại máy của mình, đẩy các thay đổi từ máy cục bộ lên dự án và kéo về các cập nhật đang diễn ra trong trình soạn thảo trực tuyến của Overleaf vào kho cục bộ của bạn.

Điều này cho phép bạn làm việc trên dự án của mình cục bộ vào những lúc không thể làm việc trực tuyến, dùng một trình soạn thảo cục bộ khác mà bạn chọn khi làm việc với dự án Overleaf, hoặc dễ dàng thêm các đầu ra từ phần mềm cục bộ khác vào dự án Overleaf của bạn.

Bạn có thể lấy URL Git và lệnh clone cho dự án của mình từ tùy chọn Git trong menu Overleaf của dự án.

![Menu dự án git.png](/files/13f36ced38043be2136a712465fec316ecf27bc4)

### Cách xác thực khi dùng tích hợp Git

Khi bạn thực hiện một thao tác Git như clone, pull hoặc push tới dự án Overleaf từ xa của mình, bạn sẽ được yêu cầu xác thực.

Để truy cập dự án Overleaf của bạn từ Git, bạn phải dùng xác thực dựa trên token của Overleaf. Để xem hướng dẫn từng bước, hãy xem: [Xác thực dựa trên token](/latex/vi/co-so-tri-thuc/042-git-integration-authentication-tokens.md).

### Sao chép dự án của bạn dưới dạng kho lưu trữ cục bộ

Từ [**Menu**](/latex/vi/co-so-tri-thuc/148-using-the-overleaf-project-menu.md) trong dự án của bạn, bạn có thể chọn Git từ các tùy chọn Đồng bộ hóa. Thao tác này sẽ mở một hộp thoại hiển thị `git clone` lệnh cần dùng khi tạo kho lưu trữ cục bộ của bạn.

![Menu dự án git.png](/files/13f36ced38043be2136a712465fec316ecf27bc4)

Ngoài ra, bạn có thể tìm URL Git từ URL của dự án (URL trong thanh địa chỉ của trình duyệt khi bạn đang ở trong một dự án).

#### Overleaf Cloud

Nếu bạn đang dùng Overleaf Cloud và URL dự án Overleaf của bạn trông như sau:

```
https://www.overleaf.com/project/1234567
```

Thì URL Git dùng để sao chép dự án sẽ là

```
https://git.overleaf.com/1234567
```

Và lệnh dùng để sao chép dự án vào một kho lưu trữ Git cục bộ sẽ là:

```
git clone https://git.overleaf.com/1234567
```

**Lưu ý**: bạn có thể được yêu cầu nhập tên người dùng và mật khẩu. Vui lòng xem [xác thực bằng mật khẩu cho tích hợp Git](/latex/vi/co-so-tri-thuc/043-git-integration-password-based-authentication.md)

#### Overleaf Server Pro (phiên bản 4.0 trở lên)

**Lưu ý**: Tích hợp Git-bridge không được bật theo mặc định trong Server Pro. Vui lòng xem [Tích hợp Git](https://github.com/overleaf/overleaf/wiki/Git-Integration) hướng dẫn của chúng tôi để biết cách bật nó.

Nếu bạn đang dùng Overleaf Server Pro và URL Dự án của bạn trông như thế này:

```
https://<SHARELATEX_SITE_URL>/project/1234567
```

Thì URL Git dùng khi sao chép dự án sẽ là:

```
https://git@<SHARELATEX_SITE_URL>/git/1234567
```

Và lệnh dùng để sao chép dự án vào một kho lưu trữ Git cục bộ bằng dòng lệnh Git sẽ là:

```
git clone git@<SHARELATEX_SITE_URL>/git/1234567
```

**Lưu ý**: Bạn có thể được yêu cầu nhập mật khẩu. Vui lòng xem: [các mã xác thực cho tích hợp Git](/latex/vi/co-so-tri-thuc/042-git-integration-authentication-tokens.md)

### Tạo một dự án Overleaf từ một kho lưu trữ Git hiện có

Nếu bạn đã có một kho lưu trữ hiện có, bạn có thể thêm một dự án Overleaf như một kho lưu trữ từ xa. Có một vài lệnh dưới đây bạn cần chạy để bắt đầu. Xin lưu ý rằng Overleaf chỉ hỗ trợ một lịch sử tuyến tính cho mỗi dự án. Tích hợp Git áp dụng giới hạn này bằng cách giới hạn số nhánh ở một. Nhánh duy nhất đó hiện được mã cứng là `master`.

1. Trước tiên, chúng tôi giả định bạn có một kho lưu trữ git trên máy tính của mình trong một thư mục tên là `my-paper`. (Nó cũng có thể được lưu trữ trên GitHub, GitLab, hoặc Bitbucket, v.v., nhưng bạn cũng cần phải có bản sao cục bộ của nó.)
2. Tạo [một dự án mới](/latex/vi/co-so-tri-thuc/031-creating-a-document-in-overleaf.md) trên Overleaf. Vì mọi nội dung trong dự án sẽ bị ghi đè, hãy dùng tùy chọn dự án 'Blank' khi tạo dự án này và xóa `main.tex` tệp trong Overleaf.
3. Tìm URL Git cho dự án (xem [ở trên](#cloning-your-project-as-a-local-repository)).

   ![Git-bridge-url.png](/files/5b0e2eb69c2ebe4f6b3f63ab9fca953438c53eae)
4. Thêm URL Git của dự án làm một remote trong dự án cục bộ của bạn.

   ```
   $ cd my-paper
   $ git remote add overleaf <GIT-URL>
   ```

   (Hãy chắc chắn dùng liên kết của riêng bạn, không phải liên kết ví dụ.)
5. Kéo nội dung mới nhất từ dự án Overleaf và hợp nhất nó vào nhánh master của bạn.

   ```
   $ git checkout master
   $ git pull overleaf master --allow-unrelated-histories --rebase=false
   ```
6. Đẩy dự án của bạn lên Overleaf.

   ```
   $ git push overleaf master --set-upstream
   ```

   Nếu bạn muốn dùng một tên nhánh khác ở cục bộ, ví dụ `my-branch`, bạn có thể đẩy các thay đổi của mình bằng một bí danh:

   ```
   $ git push overleaf my-branch:master
   ```
7. Truy cập dự án trên Overleaf. Các thay đổi của bạn sẽ ở đó. (Bạn có thể phải mở menu Dự án Overleaf để tìm tệp nào đã được đặt làm tệp tài liệu chính, và có thể thay đổi lựa chọn ban đầu này.)

### Các commit Git và tích hợp Git của Overleaf

Overleaf có một [hệ thống Lịch sử](/latex/vi/chu-de-khac/49-using-the-history-feature.md) nội bộ cho phép cộng tác đồng thời trong một dự án Overleaf. Điều này không giống Git, vì vậy tích hợp Git của Overleaf về cơ bản là một bản chuyển đổi từ cơ chế lịch sử và phiên bản của Overleaf sang Git. Điều này cho phép nhiều trường hợp sử dụng có hỗ trợ Git, nhưng không cho phép bạn làm việc trong Overleaf như thể đó là một triển khai Git đầy đủ.

#### Khi nào các commit được tạo?

Khi bạn thực hiện một `pull` hoặc `fetch` lệnh, nếu không có commit nào tồn tại cho trạng thái dự án hiện tại, một commit mới sẽ được tạo động. Khi bạn `push` các tệp từ kho lưu trữ cục bộ lên remote Overleaf, một commit cũng sẽ được tạo vào thời điểm đó, và nó sẽ hiển thị trong bất kỳ lần clone nào trong tương lai mà bạn thực hiện đối với dự án Overleaf. Khi bạn hoặc người khác đang chỉnh sửa trong Overleaf, các commit sẽ không được tạo tự động cho đến khi cần.

#### Ép tạo commit

Nếu bạn muốn buộc tạo một commit tại một điểm cụ thể trong lịch sử Overleaf, bạn có thể làm điều đó bằng cách [gắn nhãn một phiên bản](/latex/vi/chu-de-khac/49-using-the-history-feature.md) trong lịch sử Overleaf. Phiên bản được gắn nhãn sẽ có hash commit riêng ngay cả khi bạn không thực hiện git pull ngay lập tức. Một commit chỉ được tạo từ một nhãn nếu không có commit nào khác được tạo gần đây hơn điểm lịch sử Overleaf đang được gắn nhãn.

#### Theo dõi tác giả

Tính chất tạo commit đúng lúc của tích hợp Git của Overleaf có nghĩa là nếu có nhiều thay đổi ở phía Overleaf trước khi một commit được tạo, tác giả của thay đổi gần nhất sẽ được liệt kê là tác giả của commit.

Khi làm việc với các đồng tác giả, sẽ hữu ích nếu tạo một nhãn (tạo một commit) sau khi mỗi người cộng tác hoàn thành một bản cập nhật đáng kể - điều này tạo ra một chuỗi commit hiển thị trong Git phản ánh sát nhất các thay đổi đang diễn ra trong Overleaf.

### Đồng bộ với một remote khác

Tích hợp Git của Overleaf cho phép dự án Overleaf của bạn hoạt động như một kho lưu trữ từ xa cho các kho lưu trữ cục bộ. Tuy nhiên, bạn có thể muốn đồng bộ dự án Overleaf của mình với một remote khác, được lưu trữ trên GitHub, GitLab, hoặc một dịch vụ lưu trữ Git khác.

Nếu bạn đang đồng bộ dự án của mình với một kho lưu trữ được lưu trữ trên GitHub (<https://github.com/>), bạn có thể muốn dùng tính năng [đồng bộ GitHub](/latex/vi/co-so-tri-thuc/044-github-synchronization.md) trực tiếp của Overleaf.

Nếu bạn đang đồng bộ dự án của mình với GitLab, GitHub Enterprise, hoặc một máy chủ khác, bạn có thể dùng tích hợp Git của Overleaf để thiết lập một kho lưu trữ cục bộ trung gian.

Làm theo hướng dẫn ở trên cho [sao chép dự án của bạn](#cloning-your-project-as-a-local-repository) hoặc [liên kết một dự án với một kho lưu trữ hiện có](#creating-an-overleaf-project-from-an-existing-git-repository), bạn sẽ có một kho lưu trữ cục bộ có thể đẩy/kéo thay đổi từ Overleaf. Sau đó bạn có thể thêm một remote thứ hai vào kho lưu trữ này trỏ tới kho lưu trữ được lưu trữ của bạn. Kho lưu trữ cục bộ của bạn sẽ cần có hai remote để nó trỏ tới cả máy chủ Git của bạn và dự án Overleaf.

Mặc dù sẽ không có kết nối trực tiếp giữa dự án Overleaf và kho lưu trữ Git của bạn, điều này sẽ cho phép bạn giữ chúng đồng bộ.

![Git other remote.png](/files/dea33dddbf940e447d0c3cf62e3979d003677fcb)

### Thêm một dự án Overleaf như một Git submodule

Mỗi dự án trên Overleaf hoạt động như một kho lưu trữ Git độc lập, nhưng nếu bạn muốn tổ chức nhiều dự án như vậy vào một kho Git, bạn có thể thêm kho lưu trữ của từng dự án như một Git submodule theo cách thông thường. Sau đó, bạn có thể đẩy và kéo từng kho lưu trữ submodule tới/từ Overleaf một cách riêng lẻ và vẫn tập hợp chúng lại với nhau dưới dạng các submodule trong một dự án lớn hơn.

**Lưu ý:** Mặc dù các dự án Overleaf có thể là submodule trong một kho lưu trữ khác, bản thân các dự án Overleaf không thể chứa các submodule khác.

### Các hạn chế đã biết

**Các nhánh**: Hệ thống Git của Overleaf không hỗ trợ phân nhánh.

**Symlink**: Hệ thống Git của Overleaf xử lý symlink không tốt. Một symlink có thể được đẩy vào một dự án Overleaf, nhưng sẽ được chuyển thành một tệp thông thường, và sẽ ghi đè symlink cục bộ vào lần tiếp theo dự án được kéo về.

**Thẻ**: Hệ thống Git của Overleaf không hỗ trợ gắn thẻ.

**Quyền tệp**: Hệ thống Git của Overleaf không giữ lại quyền thực thi. Để khắc phục, bạn có thể chạy `git config core.fileMode false` trong bản sao cục bộ của kho lưu trữ. Sau đó bạn có thể đặt lại quyền thực thi trên bất kỳ tệp nào bị ảnh hưởng. Như vậy chúng sẽ không bị sửa đổi lại trong các thao tác Git tiếp theo.

**Git LFS:** Các dự án Overleaf không hỗ trợ Git Large File Storage.

**Git submodule:** Các dự án Overleaf có thể hoạt động như các Git submodule trong các kho lưu trữ khác, nhưng không thể chứa các Git submodule khác. Để tham chiếu các tệp từ các dự án khác, nên dùng [tính năng thêm từ dự án khác](/latex/vi/co-so-tri-thuc/009-can-i-share-files-e.g.-.bib-and-some-graphics-across-my-projects.md).

**Đổi tên thư mục**: Nếu một người dùng đổi tên một thư mục và đẩy thay đổi lên Overleaf, dự án sẽ giữ lại một thư mục trống với tên cũ, bên cạnh thư mục mới. (Ví dụ, đổi tên images/ thành img/ sẽ để lại hai thư mục trong dự án: img/ chứa các tệp hình ảnh, và images/, sẽ trống. Điều này có thể gây ra vấn đề khi một người dùng đổi tên một thư mục và tạo một tệp mới cùng tên với thư mục cũ, trong cùng một commit. Hệ thống Git của Overleaf sẽ từ chối commit này. Trong trường hợp này, chúng tôi khuyến nghị tách commit thành hai phần, và xóa thư mục còn sót lại.

**Đổi tên tệp và di chuyển tệp:** Việc đổi tên một tệp trong kho lưu trữ cục bộ của bạn sẽ trở thành thao tác xóa và tạo ở phía Overleaf. Điều này có thể dẫn đến mất siêu dữ liệu gắn với tệp ở phía Overleaf, gây mất các thay đổi được theo dõi và bình luận. Không nên di chuyển hoặc đổi tên các tệp ở phía Git nếu chúng có các thay đổi được theo dõi hoặc bình luận của Overleaf.

**Theo dõi thay đổi và Bình luận**: Rất tiếc, việc đẩy từ Git lên Overleaf có thể dẫn đến mất hoặc xáo trộn các thay đổi được theo dõi và bình luận; do đó, chúng tôi không khuyến nghị vừa sử dụng Git vừa sử dụng theo dõi thay đổi và/hoặc bình luận một cách đồng thời.

### Khắc phục sự cố

#### Lỗi không tìm thấy kho lưu trữ

Nếu bạn thấy lỗi Repository not found, rất có thể là do đang dùng sai URL. URL đúng có thể được tìm thấy bằng cách nhấp vào tùy chọn Git trong Menu bên trong dự án. Với Overleaf cloud, tích hợp Git là một tính năng cao cấp, nên nó chỉ khả dụng nếu chủ sở hữu dự án có đăng ký trả phí với Overleaf hoặc đã được cấp quyền truy cập vào tính năng này (ví dụ, bằng cách tham gia thử nghiệm beta sớm).

#### Lỗi xác thực thất bại

Vui lòng xem hướng dẫn khắc phục sự cố cho [các mã xác thực cho tích hợp Git](/latex/vi/co-so-tri-thuc/042-git-integration-authentication-tokens.md) hoặc [xác thực bằng mật khẩu cho tích hợp Git](/latex/vi/co-so-tri-thuc/043-git-integration-password-based-authentication.md) tùy theo phương thức đăng nhập bạn đang sử dụng.

#### Giới hạn tần suất

Việc giới hạn tần suất của Git Bridge thường không xảy ra khi các thao tác Git được thực hiện thủ công. Một số client Git có thể được cấu hình để tự động kiểm tra các remote xem có thay đổi hay không, điều này trong một số trường hợp có thể dẫn đến lỗi giới hạn tần suất. Nhìn chung, tắt mọi chức năng kiểm tra tự động hoặc giảm tần suất các thao tác Git sẽ giải quyết được các vấn đề này.

#### Lỗi khi đẩy các tham chiếu

Việc không thể đẩy một số tham chiếu lên dự án từ xa có thể do [vượt quá giới hạn kích thước tệp hoặc số lượng tệp của một dự án](/latex/vi/co-so-tri-thuc/119-overleaf-plan-limits.md) hoặc do bao gồm các kiểu tệp không được hỗ trợ (ví dụ: symlink hoặc LFS). Hãy xem lại các hạn chế đã biết được liệt kê ở trên để xác định các tệp có vấn đề trong commit.

Trong một số trường hợp, tăng **postBuffer** có thể khắc phục lỗi khi đẩy các tham chiếu từ kho lưu trữ cục bộ của bạn lên dự án Overleaf.

Trước hết, bạn có thể kiểm tra thiết lập hiện tại bằng lệnh:

```
     git config http.postBuffer
```

Nếu không có đầu ra, điều đó có nghĩa là giá trị mặc định 1MB đang được dùng.

Tiếp theo, hãy thử lệnh

```
     git config --global http.postBuffer 10485760
```

lệnh này sẽ đặt giá trị thành 10MB.

Bây giờ bạn có thể thử đẩy commit (về dự án gốc hoặc dự án mới). Nếu không được, bạn có thể quay lại thiết lập trước đó, hoặc xóa thiết lập bằng:

```
     git config --global --unset http.postBuffer
```

#### Hết thời gian

Các commit Git bao gồm số lượng thay đổi lớn có thể dẫn đến hết thời gian chờ. Nếu gặp tình trạng này, vui lòng thử chia commit thành các thay đổi nhỏ hơn. Nếu sự cố vẫn tiếp diễn, hãy cân nhắc đặt **postBuffer** thành 10MB như mô tả ở trên.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/vi/co-so-tri-thuc/040-git-integration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
