(by steven.do)
Không thể không thừa nhận được rằng ngày nay git đóng vai trò nền tảng trong các dự án phát triển phần mềm và là một công cụ bắt buộc phải có đối với các đội phát triển cùng làm việc với nhau và là một engine nền tảng cho sự chuyển biến của cộng đồng open-source trong những năm qua.
Hầu như các developer làm việc với git mỗi ngày, trong bài viết này tác giả Alberto Prospero sẽ giới thiệu sâu vào đặc tính bên trong và khám phá các thành phần cơ bản của Git. Cấu trúc dữ liệu Git dựa trên 03 thành phần chính là Blobs, Trees, và Commits, 03 cấu trúc này là nền tảng của Git.
Mỗi khi ta tạo một file mới và tiến hành track file vào repository bằng lệnh `git add <file-name>`, Git sẽ tạo ra 1 blob, là 1 file được lưu tại sub-folder `.git/objects` đây là nơi sẽ lưu trữ nội dung của file ta vừa tạo, tên của blob sẽ là mã hash của nội dung file được tạo.
Giả sử ta lại tạo ra thêm một sub-folder trên repository đặt tên là `subfolder` sau đó tạo ra một file `yourfile.text` trong sub-folder vừa tạo, khi ta tiến hành commit cả 02 file bằng lệnh `git commit`, Git sẽ tiến hành hai bước:
-
Bước 1 tạo ra một root tree của repository. Root tree là nơi lưu trữ tổ chức cấu trúc của các file và các folder trong toàn bộ repository, đây là một file chứa tham chiếu đến mỗi blob hoặc sub-folder trong repository, và được xây dựng theo tính chất đệ quy, mỗi dòng trong root tree tham chiếu đến một blob hoặc các sub-tree khác,và từ các blob hoặc sub-tree đó lại tiếp tục tham chiếu đến các blob hoặc sub-tree tiếp theo.
-
Bước 2 tạo ra commit. Nội dung của Commit được lưu trữ trong 1 file chứa thông tin có liên quan đến root tree, hay parent commit ( nếu có), và một vài thông tin metadata (vd: name, hoặc email của người commit và nội dung của commit). Một khi commit file được tạo, Git sẽ hash nội dung của nó và sử dụng hash đó đặt tên cho file mới
Tiếp theo tác giả giới thiệu về Git Branch. Các branch là các tên tham chiếu (named references) đến một Commit. Khi tạo mới một branch bằng câu lệnh `git checkout -b mybranch`, Git sẽ tạo ra một file mới theo đường dẫn `.git/refs/heads`, nội dung của file là mã hash của commit từ branch được tạo ra.
Thông tin chi tiết hơn về cách thức git branch hoạt động, giải thích ý nghĩa của HEAD và ý nghĩa của việc Merge Branch, có thể tham khảo tại bài viết gốc.