Fork và Pull Request: cộng tác qua nền tảng
Fork and Pull Request Workflow
Khi đóng góp cho một dự án mà bạn không có quyền đẩy trực tiếp (ví dụ open-source), bạn dùng fork và Pull Request. Đây là cách cộng tác chuẩn trên GitHub và GitLab.
Fork khác clone thế nào
git clone tạo một bản sao repo về máy local của bạn. Fork tạo một bản sao repo trên tài khoản của bạn trên server (GitHub/GitLab).
| Tiêu chí | Clone | Fork |
|---|---|---|
| Bản sao nằm ở | Máy local của bạn | Tài khoản bạn trên server |
| Là thao tác của | Git (lệnh) | Nền tảng (GitHub/GitLab) |
| Quyền ghi | Vào bản local | Vào fork của bạn trên server |
| Dùng để | Làm việc trên máy | Đóng góp khi không có quyền push gốc |
Quy trình điển hình: fork trên server để có bản của riêng mình, rồi clone fork đó về máy để làm việc.
Quy trình Pull Request
Một Pull Request (GitLab gọi là Merge Request) là đề nghị gộp thay đổi của bạn vào repo gốc, kèm nơi để thảo luận và review.
Các bước cộng tác qua fork:
# 1. Fork repo gốc trên GitHub (bấm nút Fork)
# 2. Clone fork của bạn về máy
git clone https://github.com/ban/repo.git
# 3. Tạo nhánh cho thay đổi
git switch -c fix/typo
# 4. Commit và đẩy lên fork của bạn
git push -u origin fix/typo
# 5. Mở Pull Request từ fork sang repo gốc (trên giao diện web)
Sau khi mở PR, maintainer của repo gốc xem xét và có thể merge, yêu cầu sửa, hoặc đóng PR.
Vai trò của review
Review là bước người khác đọc và đánh giá code trước khi merge. Đây là chốt chặn chất lượng quan trọng:
- Phát hiện lỗi, vấn đề bảo mật, thiết kế chưa hợp lý.
- Đảm bảo code theo quy ước chung của dự án.
- Chia sẻ kiến thức trong đội.
- Reviewer để lại comment; bạn sửa và đẩy thêm commit — PR tự cập nhật.
Nhiều dự án bắt buộc PR phải được approve và pass CI (test, lint) trước khi được merge.
Dùng upstream để sync fork
Fork của bạn không tự cập nhật khi repo gốc có commit mới. Bạn thêm repo gốc làm remote tên upstream rồi đồng bộ:
# Thêm repo gốc làm remote upstream (origin vẫn là fork của bạn)
git remote add upstream https://github.com/goc/repo.git
# Tải commit mới từ repo gốc
git fetch upstream
# Gộp vào nhánh main local của bạn
git switch main
git merge upstream/main
# Đẩy main đã cập nhật lên fork
git push origin main
origin và upstream
Theo quy ước: origin = fork của bạn (đẩy code lên đây để mở PR), upstream = repo gốc (chỉ kéo về để sync, thường không có quyền đẩy lên).
Luôn tạo nhánh cho PR
Đừng làm việc trực tiếp trên main của fork. Tạo nhánh riêng cho mỗi thay đổi để main luôn sạch và dễ sync với upstream, đồng thời mở được nhiều PR song song.
Trọng tâm thi
Fork = bản sao repo trên server (thao tác của nền tảng); clone = bản sao về máy (lệnh Git). Đóng góp khi không có quyền push: fork → clone → nhánh → push lên fork → mở Pull Request. Thêm remote upstream = repo gốc để fetch/merge sync fork.
Tóm tắt
- Clone = bản sao về máy local; fork = bản sao trên tài khoản bạn ở server.
- Quy trình đóng góp: fork → clone fork → tạo nhánh → push lên fork → mở Pull Request.
- Pull Request là đề nghị gộp kèm nơi thảo luận và review.
- Review giúp bắt lỗi, giữ chất lượng và chia sẻ kiến thức; nhiều dự án yêu cầu approve + pass CI.
- Thêm remote
upstream(repo gốc) vàfetch/mergeđể sync fork;originvẫn là fork của bạn.