Git là gì ?

Git còn được gọi là Distributed Version Control System (DVCS) hay VCS, là một hệ thống quản lý phiên bản phân tán ra đời vào năm 2005. Git giúp lập trình viên theo dõi và lưu trữ các phiên bản khác nhau của mã nguồn. Điều đặc biệt của Git là khả năng ghi nhận từng thay đổi, cho phép người dùng dễ dàng quay lại bất kỳ phiên bản trước đó họ cần, mà không cần phải nhớ rõ từng chỉnh sửa chi tiết.

 

Các khái niệm vận hành trong Git

  • Repository (Repo) Là nơi lưu trữ mã nguồn và toàn bộ lịch sử thay đổi của dự án. Git cho phép bạn tạo repo cục bộ hoặc kết nối với repo từ xa.
  • Commit Là hành động lưu lại những thay đổi ở một thời điểm cụ thể. Mỗi commit giống như một “ảnh chụp” (snapshot) trạng thái dự án, kèm theo ghi chú để mô tả nội dung thay đổi.
  • Branch Là nhánh phát triển độc lập giúp bạn thử nghiệm tính năng mới mà không ảnh hưởng đến nhánh chính. Git cho phép tạo và quản lý branch dễ dàng với hiệu suất cao.
  • Merge Là quá trình kết hợp nội dung từ một nhánh này vào nhánh khác. Đây là bước quan trọng để hợp nhất tính năng sau khi hoàn tất phát triển và kiểm thử.

Các workflow phổ biến khi sử dụng Git
Git hỗ trợ nhiều quy trình làm việc (workflow) khác nhau, tùy vào mô hình phát triển phần mềm:

  • Git Flow Phù hợp với các dự án lớn, chia rõ nhánh phát triển (develop), nhánh chính (main), nhánh tính năng (feature), nhánh sửa lỗi (hotfix)…
  • Feature Branch Workflow Tập trung vào việc phát triển từng tính năng trên nhánh riêng biệt, giúp dễ theo dõi và kiểm soát thay đổi.
  • Forking Workflow Thường dùng trong các dự án mã nguồn mở. Mỗi người dùng fork (sao chép) toàn bộ repo về tài khoản riêng, phát triển trên đó và gửi pull request khi hoàn tất.

Cách thức hoạt động của Git

Git hoạt động theo cơ chế lưu trữ dữ liệu dưới dạng các snapshot (ảnh chụp), còn gọi là các trạng thái của mã nguồn tại một điểm thời gian cụ thể.

Mỗi khi có sự thay đổi trong mã nguồn, Git chỉ lưu trữ những phần thay đổi thay vì lưu trữ toàn bộ file mới. Để đạt hiệu quả cao hơn, Git chỉ lưu trữ file khi các tệp có sự thay đổi. Đồng thời, phần mềm sẽ liên kết tới một tệp có dữ liệu giống với file đã được lưu trữ trước đó. Điều này giúp Git tiết kiệm không gian lưu trữ, tối ưu hóa quá trình lưu trữ thông tin, đặc biệt là giúp lập trình viên dễ dàng theo dõi sự thay đổi trong dự án phức tạp.

Mỗi khi thực hiện một commit, Git sẽ chụp và tạo ra một snapshot cùng một tham chiếu tới snapshot đó. Để tối ưu hóa, nếu các file không thay đổi giữa các commit, Git sẽ không lưu trữ lại file đó mà chỉ lưu một liên kết đến file giống file trước đó đã được lưu trữ.   

 

 

 

 

 

 

 

 

 

Quy trình xử lý công việc (workflow) cơ bản trên Git thường bao gồm các bước sau:

  • Khởi tạo kho lưu trữ: git init
  • Thêm file vào vùng staging: git add <tên_file>
  • Commit thay đổi: git commit <tên_file>
  • Đẩy thay đổi lên kho lưu trữ từ xa: git push

Cơ chế snapshot của Git không chỉ tiết kiệm dung lượng mà còn tăng tốc độ truy cập lịch sử, tối ưu hóa việc merge và xử lý xung đột, hỗ trợ hiệu quả cho việc sử dụng branch.

Lợi ích của git

  • Lưu lại được các phiên bản khác nhau của mã nguồn dự án phần mềm
  • Khôi phục lại mã nguồn từ một phiên bản bất kỳ
  • Dễ dàng so sánh giữa các phiên bản
  • Phát hiện được ai đã sửa phần nào làm phát sinh lỗi
  • Khôi phục lại tập tin bị mất
  • Dễ dàng thử nghiệm, mở rộng tính năng của dự án mà không làm ảnh hưởng đến phiên bản chính (master branch)
  • Giúp phối hợp thực hiện dự án trong nhóm một cách hiệu quả

Bài viết khác

Series 7 — Web Quality – Engineering :Testing – Unit Testing, Integration Testing, Web Performance – Core Web Vitals, Code Splitting, Lazy Loading

Series 7 — Web Quality – Engineering Bài 3: Testing – Unit Testing, Integration Testing và End-to-End Testing trong ứng dụng web 1. Vì sao ứng dụng web cần Testing? Trong quá trình phát triển Frontend, chúng ta thường kiểm tra ứng dụng bằng cách chạy website trên trình duyệt, nhấn vào các nút, nhập […]

Series 7 — Web Quality – Engineering : Authentication & Authorization

Series 7 — Web Quality – Engineering Bài 1: Authentication & Authorization – Xác thực và phân quyền trong ứng dụng web 1. Mở đầu Khi xây dựng một ứng dụng web có chức năng đăng nhập, chúng ta thường nghĩ rằng chỉ cần tạo biểu mẫu nhập email, mật khẩu và kiểm tra thông […]

Series 6 – Next.js Advanced – Production: Next.js Build & Deployment

Series 6 – Next.js Advanced & Production Bài 5: Next.js Build & Deployment – Từ mã nguồn đến môi trường Production 1. Mở đầu Trong quá trình phát triển một ứng dụng web, việc chạy thành công trên máy tính cá nhân chưa có nghĩa là ứng dụng đã sẵn sàng để đưa đến người […]

Series 6 – Next.js Advanced – Production: Next.js Internationalized Routing Next.js Static Export

Series 6 – Next.js Advanced & Production   Bài 3: Next.js Internationalized Routing – Tổ chức URL cho website đa ngôn ngữ 1. Mở đầu Sau khi xây dựng cơ chế dịch nội dung và định dạng theo locale, ứng dụng cần một cách để người dùng truy cập đúng phiên bản ngôn ngữ. Ví […]

Series 6 – Next.js Advanced & Production: Metadata & SEO, Internationalization (i18n) & Localization (l10n)

Series 6 – Next.js Advanced & Production Bài 1: Metadata & SEO trong Next.js – Tối ưu thông tin và khả năng hiển thị trên công cụ tìm kiếm 1. Mở đầu Khi xây dựng một website, việc hoàn thiện giao diện và chức năng mới chỉ là một phần của quá trình phát triển. […]

Series 5 – Next.js Fundamentals: CSR, SSR, SSG, ISR và cách lựa chọn

Series 5 – Next.js Fundamentals   Bài 7 : CSR, SSR, SSG và ISR – Các chiến lược Rendering trong Next.js 1. Mở đầu Khi xây dựng một website bằng React, chúng ta thường tập trung vào việc tạo component, quản lý state và hiển thị giao diện trên trình duyệt. Tuy nhiên, khi ứng dụng […]