Git là một hệ thống quản lý phiên bản phân tán, mã nguồn mở, giúp lập trình viên theo dõi thay đổi trong mã nguồn và cộng tác hiệu quả trong các dự án phần mềm. Với Git, việc quản lý mã nguồn trở nên linh hoạt hơn, cho phép nhiều nhà phát triển làm việc trên cùng một dự án mà không gây xung đột dữ liệu.
Nhờ các nền tảng như GitHub, GitLab và Bitbucket, lập trình viên có thể dễ dàng chia sẻ, đóng góp và duy trì mã nguồn một cách chuyên nghiệp. Đặc biệt, các dự án mã nguồn mở trên kho công khai nhận được sự hỗ trợ lớn từ cộng đồng thông qua pull requests—cách thức gửi đề xuất thay đổi để tích hợp vào dự án chính.
DataOnline sẽ hướng dẫn bạn cách tạo pull request bằng dòng lệnh để gửi các thay đổi của mình lên một kho Git từ xa. Điều này không chỉ giúp bạn đóng góp vào các dự án mã nguồn mở mà còn nâng cao kỹ năng làm việc nhóm và quản lý phiên bản trong phát triển phần mềm.
Yêu Cầu Tiên Quyết
Cài đặt Git: Bạn cần phải cài đặt Git trên máy tính của mình. Hãy kiểm tra xem Git đã được cài đặt hay chưa và làm theo hướng dẫn cài đặt cho hệ điều hành của bạn.
Tài khoản GitHub: Bạn cần có hoặc tạo một tài khoản GitHub. Truy cập github.com để đăng nhập hoặc đăng ký tài khoản.
Xác Thực: Từ tháng 11/2020, GitHub đã loại bỏ xác thực bằng mật khẩu. Do đó, bạn cần tạo personal access token hoặc thêm thông tin SSH public key để có thể truy cập các kho GitHub qua dòng lệnh.
Chọn Dự Án Mã Nguồn Mở: Cuối cùng, hãy chọn một dự án mã nguồn mở để đóng góp. Bạn có thể làm quen với các dự án mã nguồn mở thông qua phần giới thiệu chung về chủ đề này.
Tạo bản sao của kho mã nguồn
Một repository (hoặc viết tắt là repo) chính là thư mục chính chứa toàn bộ tệp dự án, bao gồm tài liệu và lịch sử sửa đổi của từng tệp. Trên GitHub, các kho có thể có nhiều cộng tác viên và có thể ở chế độ công khai hoặc riêng tư.
Để làm việc trên một dự án mã nguồn mở, bạn cần tạo bản sao của kho bằng cách fork và sau đó clone về máy để có một bản làm việc cục bộ.
Fork kho mã nguồn
Bạn có thể fork một kho (repository) trên GitHub bằng cách mở trình duyệt và truy cập vào URL của dự án mã nguồn mở mà bạn muốn đóng góp.
URL của các kho trên GitHub sẽ bao gồm cả tên người dùng của chủ sở hữu và tên của kho.
https://github.com/do-community/cloud_haiku
Trong ví dụ trên, do-community
là tên người dùng và cloud_haiku
là tên của kho.
Sau khi bạn đã xác định được dự án mà mình muốn đóng góp, bạn có thể truy cập URL, được định dạng như sau:
https://github.com/username/repository
Hoặc, bạn có thể tìm kiếm dự án bằng thanh tìm kiếm của GitHub.
Khi bạn ở trang chính của kho, một nút Fork sẽ hiển thị ở góc trên bên phải của trang, ngay dưới biểu tượng người dùng của bạn.
Nhấp vào nút Fork để bắt đầu quá trình fork. Trong cửa sổ trình duyệt, bạn sẽ nhận được thông báo rằng kho bạn đang fork đang được xử lý.
Sau khi quá trình hoàn tất, trình duyệt của bạn sẽ chuyển đến một màn hình tương tự như màn hình của kho ban đầu, ngoại trừ ở đầu trang bạn sẽ thấy tên người dùng của bạn xuất hiện trước tên kho, và trong URL cũng sẽ hiển thị tên người dùng của bạn trước tên kho.
Vậy, trong ví dụ trên, thay vì hiển thị do-community / cloud_haiku ở đầu trang, bạn sẽ thấy your-username / cloud_haiku, và URL mới sẽ có dạng:
https://github.com/your-username/cloud_haiku
Với kho đã được fork, bạn đã sẵn sàng để clone về máy, từ đó có một bản sao làm việc cục bộ của mã nguồn.
Clone kho mã nguồn
Khi bạn làm việc trong một dự án hợp tác, bạn và các lập trình viên khác đóng góp cho repository sẽ có những ý tưởng khác nhau về tính năng mới hoặc sửa lỗi cùng một lúc. Một số tính năng mới có thể không mất nhiều thời gian để triển khai, nhưng có những tính năng thì cần theo dõi và phát triển liên tục. Vì lý do này, việc tạo nhánh (branch) cho repository rất quan trọng để bạn có thể quản lý quy trình làm việc, cô lập mã của mình, và kiểm soát các tính năng nào được hợp nhất vào nhánh chính của dự án.
Nhánh chính của một repository thường được gọi là main branch. Một quy tắc hay được khuyến nghị là coi mọi thứ trên nhánh chính luôn sẵn sàng để triển khai cho người khác sử dụng bất cứ lúc nào.
Lưu ý: Vào tháng 6/2020, GitHub đã cập nhật thuật ngữ, thay vì gọi nhánh mặc định là master, giờ đây nhánh mặc định được gọi là main. Nếu nhánh mặc định của bạn vẫn hiển thị là master, bạn có thể thay đổi thành main bằng cách cập nhật cài đặt nhánh mặc định.
Khi tạo nhánh dựa trên dự án hiện có, điều quan trọng là bạn phải tạo nhánh mới từ nhánh main. Ngoài ra, hãy đặt tên cho nhánh sao cho mô tả được mục đích của bạn; thay vì gọi nó là my-branch
, bạn nên đặt tên như frontend-hook-migration
hoặc fix-documentation-typos
.
Để tạo nhánh từ cửa sổ terminal, trước tiên hãy chuyển đến thư mục chứa repository (chắc chắn sử dụng tên chính xác của repository, ví dụ như cloud_haiku
):
cd repository
Sau đó, tạo nhánh mới bằng lệnh:
git branch new-branch
Giờ đây, khi nhánh mới đã được tạo, bạn có thể chuyển sang nhánh đó bằng lệnh:
git checkout new-branch
Khi bạn chạy lệnh git checkout new-branch
, bạn sẽ nhận được thông báo như sau:
Output Switched to branch 'new-branch'
Ngoài ra, bạn có thể kết hợp hai lệnh trên thành một với cờ -b
:
git checkout -b new-branch
Nếu bạn muốn chuyển lại về nhánh main, hãy sử dụng lệnh:
git checkout main
Lệnh checkout
cho phép bạn chuyển đổi giữa các nhánh khác nhau, từ đó bạn có thể làm việc trên nhiều tính năng cùng lúc.
Tại thời điểm này, bạn đã sẵn sàng để chỉnh sửa các tệp hiện có hoặc thêm tệp mới vào dự án trên nhánh riêng của mình.
Thực hiện thay đổi cục bộ
Để minh họa cách tạo pull request, hãy sử dụng repository cloud_haiku
làm ví dụ và tạo một tệp mới trong bản sao cục bộ của bạn. Dùng trình soạn thảo văn bản ưa thích của bạn để tạo một tệp mới, để chúng ta có thể thêm một bài thơ haiku mới như đã được hướng dẫn trong các quy định đóng góp. Ví dụ, chúng ta có thể dùng nano và đặt tên tệp là filename.md
. Bạn cần đặt tên cho tệp của mình một cách độc đáo và có phần mở rộng .md
cho Markdown.
Tiếp theo, chúng ta sẽ thêm một số nội dung vào tệp mới, theo đúng các quy định đóng góp. Chúng ta cần sử dụng định dạng Jekyll và thêm một bài haiku với các dấu ngắt dòng. Dưới đây là một ví dụ về tệp, vì bạn cần đóng góp một bài haiku nguyên bản:
Sau khi đã nhập nội dung, hãy lưu và đóng tệp. Nếu bạn dùng nano, thực hiện bằng cách nhấn CTRL + X
, sau đó Y
và ENTER.
Sau khi bạn đã chỉnh sửa một tệp hiện có hoặc thêm tệp mới vào dự án, bạn có thể đưa tệp đó vào giai đoạn “staging” của repository cục bộ bằng lệnh git add
. Trong ví dụ này, với tệp filename.md
, ta sẽ nhập:
git add filename.md
Lệnh này đã chỉ định tên của tệp vừa tạo để đưa nó vào trạng thái sẵn sàng cho commit, đảm bảo tệp của bạn đã sẵn sàng được thêm vào repository.
Nếu bạn muốn thêm tất cả các tệp mà bạn đã chỉnh sửa trong một thư mục cụ thể, bạn có thể đưa tất cả chúng vào staging bằng lệnh:
git add .
Ở đây, dấu chấm (.) đại diện cho tất cả các tệp liên quan.
Nếu bạn muốn thêm đệ quy tất cả các thay đổi, bao gồm cả các tệp trong các thư mục con, bạn có thể nhập:
git add .
Hoặc, thay thế bằng:
git add -A
để đưa tất cả các tệp mới vào trạng thái staging.
Sau khi tệp của bạn đã được đưa vào staging, chúng ta cần ghi lại những thay đổi đã thực hiện đối với repository bằng lệnh git commit.
Đưa thay đổi lên kho mã
Cập nhật kho mã cục bộ
Trong khi bạn làm việc trên một dự án cùng với các cộng tác viên khác, việc giữ cho repository cục bộ của bạn luôn được cập nhật với dự án là rất quan trọng, vì bạn không muốn tạo pull request cho những đoạn mã tự động gây ra xung đột (mặc dù trong các dự án hợp tác, xung đột là điều không tránh khỏi). Để giữ cho bản sao cục bộ của bạn luôn cập nhật, bạn cần đồng bộ các thay đổi.
Trước tiên, chúng ta sẽ cấu hình một remote cho repository đã fork, sau đó tiến hành đồng bộ repository fork.
Cấu hình remote cho kho Fork
Các repository từ xa cho phép bạn cộng tác với những người khác trong một dự án Git. Mỗi repository từ xa là một phiên bản của dự án được lưu trữ trên Internet hoặc trên một mạng mà bạn có quyền truy cập. Tùy thuộc vào quyền của bạn, mỗi repository từ xa có thể được thiết lập ở chế độ chỉ đọc hoặc đọc-ghi.
Để có thể đồng bộ các thay đổi mà bạn thực hiện trong một repository đã fork với repository gốc mà bạn đang làm việc, bạn cần cấu hình một remote trỏ đến repository gốc (upstream). Việc này chỉ cần thiết lập một lần.
Đầu tiên, hãy kiểm tra các remote server mà bạn đã cấu hình. Lệnh git remote
sẽ liệt kê các repository từ xa mà bạn đã chỉ định, vì vậy nếu bạn đã clone repository như hướng dẫn ở trên, bạn sẽ ít nhất nhận được đầu ra liên quan đến remote origin – tên mặc định được Git gán cho thư mục được clone.
Từ thư mục của repository trong cửa sổ terminal, hãy sử dụng lệnh git remote
cùng với cờ -v
để hiển thị các URL mà Git đã lưu cùng với các tên ngắn của remote (ví dụ như “origin”):
git remote -v
Vì bạn đã clone một repository, đầu ra của bạn sẽ giống như sau:
Output origin https://github.com/your-username/forked-repository.git (fetch) origin https://github.com/your-username/forked-repository.git (push)
Nếu bạn đã cấu hình nhiều hơn một remote, lệnh git remote -v
sẽ liệt kê tất cả chúng.
Tiếp theo, chúng ta sẽ chỉ định một remote mới với tên upstream để đồng bộ với repository đã fork. Đây chính là repository gốc mà bạn đã fork từ đó. Chúng ta sẽ làm điều này bằng lệnh git remote add
:
git remote add upstream https://github.com/original-owner-username/original-repository.git
Với ví dụ về cloud_haiku, lệnh sẽ là:
git remote add upstream https://github.com/do-community/cloud_haiku.git
Trong ví dụ này, upstream
là tên ngắn mà chúng ta đặt cho repository từ xa vì theo Git, “upstream” ám chỉ repository mà chúng ta đã clone từ đó. Nếu bạn muốn thêm một remote trỏ đến repository của một cộng tác viên, bạn có thể sử dụng tên người dùng hoặc một biệt danh ngắn gọn cho remote đó.
Bạn có thể xác minh rằng remote trỏ đến upstream đã được thêm thành công bằng cách sử dụng lại lệnh:
git remote -v
Output origin https://github.com/your-username/forked-repository.git (fetch) origin https://github.com/your-username/forked-repository.git (push) upstream https://github.com/original-owner-username/original-repository.git (fetch) upstream https://github.com/original-owner-username/original-repository.git (push)
Giờ đây, bạn có thể tham chiếu đến upstream
trên dòng lệnh thay vì phải nhập đầy đủ URL, và bạn đã sẵn sàng để đồng bộ repository fork của mình với repository gốc.
Đồng bộ kho Fork
Ở thời điểm này, bạn đã sẵn sàng để tạo một pull request gửi đến repository gốc.
Bạn nên truy cập vào repository đã fork của mình và nhấn vào nút New pull request ở phía bên trái của trang.

Trên màn hình tiếp theo, bạn có thể thay đổi nhánh; ở mỗi bên, hãy chọn repository phù hợp từ menu thả xuống và chọn nhánh tương ứng.
Ví dụ, khi bạn chọn nhánh main của repository gốc ở bên trái và nhánh new-branch của repository đã fork ở bên phải, bạn sẽ nhận được một màn hình thông báo rằng các nhánh của bạn có thể được hợp nhất nếu không có mã nào mâu thuẫn:
Bạn cần thêm tiêu đề và bình luận vào các trường thích hợp, sau đó nhấn nút Create pull request.
Ở thời điểm này, người quản lý của repository gốc sẽ quyết định có chấp nhận pull request của bạn hay không. Họ có thể yêu cầu bạn chỉnh sửa hoặc điều chỉnh lại mã của mình trước khi chấp nhận pull request thông qua quá trình review mã.
Kết luận