KHÁI NIỆM GIT, REPOSITORY VÀ CƠ CHẾ HOẠT ĐỘNG
-
Git là gì?
Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS), dùng để lưu trữ, quản lý và theo dõi những thay đổi trong mã nguồn, dữ liệu và các tệp tin của một dự án.
Git cho phép lập trình viên theo dõi lịch sử chỉnh sửa, khôi phục các phiên bản trước đó và phối hợp làm việc với nhiều thành viên trong cùng một dự án.
1.1. Vì sao cần sử dụng Git?
Khi lập trình cá nhân, việc quản lý mã nguồn tương đối đơn giản. Tuy nhiên, khi làm việc nhóm, việc đồng bộ và quản lý mã nguồn sẽ trở nên phức tạp.
Nếu chỉ dùng các cách truyền thống như gửi mã nguồn qua mạng hoặc sao chép bằng USB, nhóm có thể gặp:
- Không đồng bộ phiên bản: Một thành viên cập nhật code nhưng không báo cho người còn lại, dẫn đến mỗi người dùng một phiên bản khác nhau.
- Trùng lặp mã nguồn: Nhiều người cùng sửa một đoạn code, khó kết hợp lại với nhau.
- Khó khôi phục mã nguồn: Đoạn code đang chạy tốt bị sửa thành lỗi nhưng không lưu phiên bản cũ.
- Khó theo dõi lịch sử chỉnh sửa: Không biết ai sửa, sửa gì, sửa lúc nào.
- Khó khăn khi làm việc nhóm: Chia sẻ và tổng hợp code thủ công mất nhiều thời gian.
Git được tạo ra để giải quyết những vấn đề trên, giúp quản lý mã nguồn có tổ chức, thuận tiện và an toàn hơn.
1.2. Lợi ích của Git
- Quản lý phiên bản: Lưu lịch sử thay đổi và cho phép xem lại các phiên bản trước.
- Khôi phục dữ liệu: Đưa mã nguồn về trạng thái đã lưu khi phát sinh lỗi.
- Theo dõi thay đổi: Ghi nhận người thực hiện và nội dung thay đổi.
- Hỗ trợ làm việc nhóm: Nhiều lập trình viên phát triển các phần khác nhau của cùng một dự án.
- Đồng bộ mã nguồn: Chia sẻ và cập nhật code giữa các máy thông qua kho lưu trữ từ xa.
- Phân tán và sao lưu: Mỗi bản sao đầy đủ của Repository đều có thể chứa lịch sử dự án, tăng khả năng phục hồi khi có sự cố.
-
Repository trong Git
Repository (kho lưu trữ) là nơi chứa các thông tin cần thiết để Git quản lý dự án: mã nguồn, dữ liệu, lịch sử thay đổi và thông tin phiên bản.
Git có hai loại Repository chính:
2.1. Local Repository
Kho lưu trữ cục bộ, được tạo và quản lý trực tiếp trên máy tính cá nhân.
- Nằm trên máy tính cá nhân.
- Lưu mã nguồn và lịch sử thay đổi của dự án.
- Cho phép thêm tệp, lưu phiên bản, xem lịch sử và khôi phục mã nguồn.
- Hoạt động được mà không cần Internet.
2.2. Remote Repository
Kho lưu trữ đặt trên máy chủ hoặc dịch vụ trực tuyến, cho phép nhiều lập trình viên chia sẻ và đồng bộ mã nguồn.
Một số nền tảng phổ biến:
- GitHub: Lưu trữ và quản lý mã nguồn bằng Git, hỗ trợ cộng tác và quản lý dự án.
- GitLab: Quản lý mã nguồn và quy trình phát triển phần mềm, tích hợp công cụ CI/CD.
- Bitbucket: Lưu trữ mã nguồn Git, hỗ trợ quản lý dự án và cộng tác nhóm.
2.3. Mối quan hệ giữa Local và Remote Repository
Hai loại Repository trao đổi dữ liệu với nhau thông qua các thao tác đồng bộ.
Ví dụ:
- Lập trình viên chỉnh sửa code trên máy và lưu thay đổi vào Local Repository.
- Sau đó đẩy các thay đổi lên Remote Repository để chia sẻ.
- Các thành viên khác tải thay đổi mới từ Remote Repository về máy của mình.
Một ưu điểm quan trọng: mỗi bản sao Repository được sao chép đầy đủ thường chứa cả lịch sử phiên bản. Vì vậy nếu máy chủ gặp sự cố, dữ liệu và lịch sử dự án vẫn có thể được khôi phục từ một bản sao đầy đủ khác.
-
Cơ chế hoạt động của Git
Git quản lý phiên bản dựa trên những thay đổi và các trạng thái được lưu lại của dự án.
3.1. Theo dõi thay đổi
Khi thêm, sửa hoặc xóa tệp, Git có thể phát hiện những thay đổi đó. Git dùng các cơ chế lưu trữ hiệu quả, trong đó có việc lưu và tái sử dụng dữ liệu để tránh nhân bản toàn bộ dự án cho mỗi lần cập nhật. Nhờ vậy tối ưu không gian lưu trữ và hỗ trợ quản lý lịch sử phiên bản.
3.2. Snapshot
Snapshot (ảnh chụp trạng thái) mô tả trạng thái của dự án tại một thời điểm được lưu lại.
Khi thực hiện một lần Commit, Git ghi nhận trạng thái của các tệp đã được đưa vào vùng chuẩn bị (Staging Area).
- Mỗi Commit lưu lại một trạng thái của dự án.
- Có thể xem lại lịch sử Commit để theo dõi quá trình phát triển.
- Có thể dùng các Commit trước đó để khôi phục hoặc đối chiếu mã nguồn.
- Git tái sử dụng dữ liệu không thay đổi giữa các phiên bản để tiết kiệm dung lượng.
Nhờ cơ chế này, lập trình viên có thể quay lại những trạng thái đã lưu khi cần.








Khoá học lập trình game con rắn cho trẻ em




