Trang chủ / Ngôn Ngữ & Framework
Bài học lập trình từ tệp trống: Kiến thức cơ bản về Git và quy trình cộng tác cho dự án cá nhân và nhóm
Mọi dự án viết mã đều bắt đầu từ một tệp trống. Trạng thái trống rỗng đó vừa mang lại cảm giác hứng khởi vừa có chút e ngại, bởi chưa có gì bảo vệ những thay đổi của bạn. Git mang lại sự bảo vệ đó bằng cách ghi lại lịch sử, cho phép bạn thử nghiệm an toàn và giúp việc cộng tác trở nên dễ đoán hơn. Nếu bạn mới làm quen với quản lý phiên bản, hướng dẫn này sẽ giải thích quy trình git và quản lý phiên bản cho người mới giải thích theo từng bước nhỏ, kèm các lệnh và thói quen bạn có thể áp dụng ngay từ ngày đầu tiên.
Tại sao Git quan trọng cho công việc cá nhân và nhóm
Khi làm việc một mình, Git hoạt động như một nút hoàn tác có trí nhớ. Bạn có thể thử một ý tưởng, so sánh nó với phiên bản của ngày hôm qua và giữ lại hoặc khôi phục thay đổi mà không lo lắng. Khi làm việc cùng người khác, Git trở thành nguồn thông tin đáng tin cậy duy nhất về việc ai đã thay đổi gì và vì sao. Nó giúp bạn hợp nhất các phần việc độc lập, xem xét mã trước khi phát hành và duy trì lịch sử gọn gàng để những người đóng góp sau này có thể hiểu được.
Các khái niệm cốt lõi cần nắm trước
- Repository: Thư mục dự án được Git theo dõi, bao gồm toàn bộ lịch sử.
- Working directory: Các tệp bạn đang nhìn thấy và chỉnh sửa ngay lúc này.
- Staging area: Khu vực chuẩn bị nơi bạn chọn những thay đổi cho bản chụp tiếp theo.
- Commit: Một bản chụp đã lưu kèm thông điệp mô tả thay đổi.
- Branch: Một dòng phát triển song song mà bạn có thể chuyển đổi và hợp nhất.
- Remote: Bản sao của kho lưu trữ trên máy chủ, ví dụ như GitHub, GitLab hoặc Bitbucket.
Cài đặt Git trên máy của bạn
Cài đặt Git từ trình quản lý gói của hệ điều hành hoặc từ trang chính thức. Mở terminal và thiết lập danh tính của bạn, thông tin này sẽ được Git gắn vào mỗi commit bạn tạo.
- git config –global user.name “Your Name”
- git config –global user.email “[email protected]”
Bạn cũng có thể chọn tên nhánh mặc định nếu muốn, ví dụ như main. Nhiều nền tảng hiện nay sử dụng tên này theo mặc định.
Bắt đầu dự án từ tệp trống
Tạo một thư mục cho dự án, thêm một tệp như README.md và bắt đầu quản lý phiên bản.
- mkdir project
- cd project
- git init
- echo “# Project” > README.md
- git status
Lệnh git status sẽ hiển thị các tệp chưa được theo dõi. Hãy thêm tệp vào khu vực staging và tạo commit đầu tiên.
- git add README.md
- git commit -m “Initial commit”
Quy trình làm việc hằng ngày cơ bản
Hầu hết các ngày làm việc đều tuân theo một vòng lặp đơn giản: thay đổi, đưa vào staging, commit và push. Hãy giữ các commit nhỏ và tập trung, đồng thời viết thông điệp giải thích mục đích thay đổi chứ không chỉ liệt kê tên tệp.
- Chỉnh sửa tệp trong trình soạn thảo.
- git status để xem lại các thay đổi.
- git diff để kiểm tra chi tiết.
- git add các tệp cụ thể.
- git commit -m “Short, clear message”
- git push để gửi các commit lên remote.
Hãy viết thông điệp commit ở dạng mệnh lệnh, ví dụ như “Add login form” hoặc “Fix date format”. Cách viết này giúp nhật ký và tiêu đề pull request trở nên dễ đọc hơn.
Nhánh giúp bạn thử nghiệm an toàn
Nhánh là cốt lõi của việc cộng tác trong Git. Hãy tạo một nhánh cho tính năng mới, thực hiện các commit ở đó và hợp nhất lại khi đã sẵn sàng.
- git switch -c feature-search
- Thực hiện thay đổi và commit.
- git switch main
- git merge feature-search
Nếu bạn quen với các lệnh cũ hơn, git checkout -b feature-search sẽ tạo và chuyển sang nhánh mới trong một bước. Khi không còn cần nhánh nữa, hãy xóa nó để giữ kho lưu trữ gọn gàng.
Đồng bộ với remote
Kết nối kho lưu trữ cục bộ với remote và đẩy nhánh main lên.
- git remote add origin https://github.com/you/project.git
- git push -u origin main
Khi cộng tác, hãy pull trước khi bắt đầu công việc mới để cập nhật các commit của người khác.
- git pull
Nếu thay đổi của bạn và của người khác chạm vào cùng một dòng, Git sẽ yêu cầu bạn giải quyết xung đột hợp nhất. Hãy mở các tệp bị ảnh hưởng, tìm các dấu hiệu xung đột, chọn đoạn mã đúng và sau đó commit kết quả giải quyết.
Một quy trình cộng tác đơn giản
Đối với nhóm, một quy trình dễ đoán sẽ giúp giảm nhầm lẫn. Một mô hình phổ biến là dùng nhánh tính năng kết hợp với pull request.
- Cập nhật nhánh main cục bộ.
- Tạo nhánh tính năng với tên rõ ràng.
- Đẩy nhánh lên và mở pull request.
- Yêu cầu xem xét và chạy các kiểm tra tự động nếu có.
- Hợp nhất sau khi được phê duyệt và xóa nhánh tính năng.
Trong quá trình xem xét, hãy để lại nhận xét mang tính xây dựng. Phê duyệt khi các bài kiểm tra đã qua và mã dễ đọc, dễ hiểu. Các pull request nhỏ và thường xuyên sẽ dễ xem xét hơn nhiều so với những pull request lớn.
Những thói quen tốt giúp tiết kiệm thời gian
- Commit sớm và thường xuyên. Các commit nhỏ dễ hiểu và dễ khôi phục hơn.
- Viết thông điệp ý nghĩa. Giải thích lý do tồn tại của thay đổi, không chỉ mô tả đã thay đổi gì.
- Sử dụng .gitignore. Giữ các tệp build, thông tin bí mật và tệp tạm ra khỏi lịch sử.
- Gắn thẻ các mốc quan trọng. Thẻ giúp đánh dấu các bản phát hành và dễ tìm lại sau này.
- Giữ lịch sử gọn gàng. Ưu tiên rebase để dọn dẹp lịch sử cục bộ trước khi chia sẻ, và dùng merge cho các nhánh đã chia sẻ.
Rebase và merge: khi nào nên dùng loại nào
Rebase sẽ phát lại các commit của bạn trên một nhánh khác, tạo thành một đường thẳng. Nó hữu ích để dọn dẹp công việc cục bộ trước khi bạn công khai. Merge giữ lại toàn bộ lịch sử về cách các nhánh được kết hợp. Trên các nhánh đã chia sẻ, merge an toàn hơn vì nó không vi��t lại các commit mà người khác có thể đã pull về.
Một quy tắc thực tế là: rebase cho công việc chưa push của riêng bạn, merge cho các nhánh đã chia sẻ.
Xử lý lỗi một cách tự tin
Lỗi là điều khó tránh. Git cung cấp các công cụ để khắc phục.
- git restore có thể loại bỏ thay đổi trong thư mục làm việc.
- git restore –staged có thể đưa tệp ra khỏi staging.
- git commit –amend có thể sửa thông điệp commit gần nhất hoặc thêm một thay đổi nhỏ trước khi bạn push.
- git revert tạo một commit mới để hoàn tác một commit trước đó, cách này an toàn cho lịch sử đã chia sẻ.
Hãy tránh viết lại lịch sử mà người khác đã pull về, trừ khi cả nhóm đã thống nhất kế hoạch khôi phục.
Tổ chức công việc với issue và milestone
Hãy liên kết các commit và pull request với issue. Tham chiếu số issue trong thông điệp commit, ví dụ như “Fix date picker #12”. Điều này tạo ra khả năng truy vết. Sử dụng milestone hoặc bảng quản lý dự án để nhóm các công việc liên quan và theo dõi tiến độ hướng tới bản phát hành.
Từ tệp trống đến dự án đáng tin cậy
Hãy bắt đầu với một tệp README rõ ràng giải thích dự án làm gì và cách chạy nó. Thêm giấy phép nếu bạn muốn người khác sử dụng mã của mình. Thiết lập một quy trình CI đơn giản để chạy kiểm thử và kiểm tra mã trên mỗi lần push. Khi Git đảm nhiệm việc quản lý lịch sử và cộng tác, tệp trống ban đầu sẽ trở thành một dự án đáng tin cậy mà người khác có thể tin tưởng và cải thiện.
Yếu tố then chốt là sự nhất quán. Hãy sử dụng một nhóm nhỏ các lệnh mỗi ngày, giữ cho các commit tập trung và chia sẻ công việc thông qua nhánh và quy trình xem xét. Theo thời gian, những thói quen này sẽ biến việc quản lý phiên bản từ một công việc tẻ nhạt thành một quy trình bình tĩnh, có thể lặp lại, hỗ trợ cả thử nghiệm cá nhân lẫn bàn giao của nhóm.
