Git 01. Version control system (VCS) là gì? Git là gì?
Hello! I'm Zu.Doan
Đây là series tổng hợp lại kiến thức về Git, mục đích để đào sâu về VCS cũng như Git để có thể giải quyết các vấn đề về quản lý source code.
Nội dung bài viết ưu tiên sự ngắn gọn, dễ hiểu để mọi người có thể học & áp dụng ngay lập tức.
1. Version control system (VCS) là gì?
- VCS là một hệ thống ghi lại những sự thay đổi của một hoặc nhiều file theo thời gian, vì vậy bạn có thể gọi tới bất cứ một version cụ thể nào trước đó.
- Có thể revert file, entire project back to previous state.
- Có thể so sánh sự thay đổi theo thời gian.
- Theo dõi chủ thể tương tác vào file/project source.
- Tránh mất mát và dễ dàng phục hồi file/project source.
2. Một chút lịch sử VCS
- Local VCS: là một hệ thống local computer có chứa một simple DB để lưu các sự thay đổi của file. (Không làm việc nhóm được) - Don't care it
- Centralized VCS (eg: SVN) - Don't care it
- Distributed VCS (eg: Git) - Take care it
3. Tìm hiểu Git là gì thông qua 5 yếu tố (mình chỉ đề cập tới 3 yếu tố quan trọng)
3.1 Snapshots, Not differences
Là việc lưu trữ các file đã thay đổi + tham chiếu của các file không thay đổi.
Hình dưới đây mô tả cách hoạt động của các VCS khác (e.g SVN)

Các bạn có thể thấy, qua từng version, chỉ các file có nội dung thay đổi mới dc lưu trữ ở version tiếp theo.
Còn Git sẽ lưu trữ tất cả các file thay đổi + tham chiếu tới các file không thay đổi (với file ở version liền trước) ở version tiếp theo

3.2 Gần như mọi thứ được thực hiện ở local
Bởi vì khi sử dụng Git, quá trình pull code đã chính là tạo ra 1 project version ở máy local (đã được lưu ở local disk) tương tự như trên remote repository (eg: commit code, check log, history...)
3.3 Ba vùng làm việc của Git (của file trong Git)
Ba vùng đó là: Working directory - Staging area - .git directory (repository local)

Có thể mô tả hình ảnh trên như sau:
- Khi làm việc ở local, chúng ta phải pull code từ remote repository về và thực hiện checkout new brach để làm việc.
- Sau khi chỉnh sửa các files xong, chúng ta cần đưa các files đã thay đổi đó vào Staging area để chuẩn bị cho thao tác commit.
- Sau khi commit xong, chúng ta lại đưa tiếp các files đó từ Staging area tới .git directory (repository local) để chuẩn bị cho thao tác push code lên remote repository.
Hi vọng bài viết này sẽ hữu ích đối với các bạn.
Thank everyone! Bye2 :D
