Nhìn lại 20 năm của Git – vẫn kỳ lạ và vẫn tuyệt vời
(blog.gitbutler.com)- Git là hệ thống quản lý phiên bản bắt đầu từ 20 năm trước khi Linus Torvalds thực hiện commit đầu tiên
- Ban đầu chỉ là một dự án cá nhân đơn giản, nhưng sau đó đã phát triển thành hệ thống quản lý phiên bản được sử dụng rộng rãi nhất trên toàn thế giới
- Tác giả là đồng sáng lập GitHub, và đã tham gia sâu vào sự phát triển của Git thông qua việc xây dựng sách và cộng đồng liên quan đến Git
- Thuở ban đầu, đây chỉ là một công cụ quản lý nội dung thư mục đơn giản, nhưng giờ đã trở thành công cụ cốt lõi làm thay đổi cách phát triển phần mềm
Triết lý và sự cần thiết của Git
- Git ra đời từ sự bất mãn của cộng đồng Linux kernel với những giới hạn của các công cụ quản lý phiên bản trước đó
- Cách cộng tác trước đây là phân tán và mang tính cục bộ, thông qua mailing list, tarball và file patch
- Các công cụ SCM thời đó chậm, tập trung hóa và kém hiệu quả, nên cách làm dựa trên tarball/patch lại tốt hơn
- Một công cụ tên là Bitkeeper từng là phương án thay thế, nhưng do vấn đề giấy phép nên việc phát triển Git đã bắt đầu
- Ngay từ đầu, Git không được thiết kế như một "hệ thống quản lý phiên bản" mà là một cấu trúc dữ liệu để xử lý patch và tarball tốt hơn
Commit đầu tiên của Git
- Commit đầu tiên là một công cụ rất cơ bản để theo dõi nội dung thư mục
- Khi đó các công cụ không phải là những lệnh như
git commit, mà là các công cụ cơ sở dữ liệu cấp thấp nhưwrite-tree,commit-tree - Ngay từ đầu Git đã có các khả năng sau:
- Lưu thư mục làm việc vào cache (
update-cache), chuyển thành đối tượng cây (write-tree) rồi ghi vào cơ sở dữ liệu - Lưu thay đổi dưới dạng commit (
commit-tree) để tạo lịch sử - Đọc và so sánh các đối tượng trong cơ sở dữ liệu bằng
cat-file,read-tree,show-diff
- Lưu thư mục làm việc vào cache (
- Linus xem Git chỉ là phần backend, tức các "công cụ đường ống (plumbing)", và muốn phần UI được xây dựng từ bên ngoài
Ví dụ phân phối nội dung bằng Git
- Tác giả đã sử dụng Git vào năm 2005 tại startup tên Reactrix để phân phối nội dung quảng cáo số
- Hàng trăm màn hình hiển thị số cần những tổ hợp quảng cáo khác nhau, và khả năng định địa chỉ nội dung của Git đã giải quyết việc này một cách hiệu quả
- Đây là một ví dụ sáng tạo về việc dùng Git không phải để quản lý mã nguồn mà là như một công cụ phân phối nội dung
- Nick Hengeveld, một trong những người đóng góp chính cho dự án Git thời kỳ đầu, đã bổ sung các tính năng như SSL và truyền HTTP song song
- Trải nghiệm này đã trở thành động lực để tạo ra tài liệu, website và sách về Git, rồi tiếp nối đến GitHub
Sự tiến hóa của lệnh Git và công cụ cho người dùng
- Các lệnh Git thời kỳ đầu đều là công cụ cấp thấp dựa trên script, rất khác so với hiện nay
- Những lệnh như
git log,git rebase,git commitban đầu cũng chỉ là các shell script đơn giản, rồi dần phát triển thành định dạng hiện tại
Phiên bản đầu tiên của git log
git loglà một script đơn giản có dạnggit-rev-list --pretty HEAD | lessrev-listlà công cụ để in ra ID commit và vẫn còn tồn tại cho đến hiện nay
Sự xuất hiện của git rebase
- Khái niệm
rebasera đời trong cuộc trao đổi email năm 2005 giữa Linus và Junio Hamano - Cách làm việc của Junio là bỏ HEAD hiện tại và tiếp tục công việc dựa trên HEAD mới, và cách đó được gọi là "rebase"
- Điều này sau đó đã phát triển thành lệnh
git rebasenhư chúng ta biết ngày nay
Nguồn gốc của Octocat
- Octocat, biểu tượng của GitHub, lấy ý tưởng từ chiến lược "octopus merge" trong Git
- Chiến lược gộp nhiều nhánh cùng lúc được gọi là "octopus", và trong những ngày đầu của GitHub, từ này đã truyền cảm hứng để tạo ra nhân vật Octocat
Hiện tại và tương lai của Git
- Tác giả vẫn đang sử dụng Git đúng theo mục đích ban đầu của nó như một "stupid content tracker"
- Dự án GitButler đang tận dụng Git theo cách theo dõi và ghi lại lịch sử của dự án
- Git vẫn là một hệ thống phân tán và theo dõi nội dung mạnh mẽ, và trong tương lai vẫn có thể được sử dụng theo nhiều cách khác nhau
- Chúc mừng sinh nhật, Git. Vẫn kỳ lạ và vẫn tuyệt vời
6 bình luận
Chúc mừng sinh nhật lần thứ 20 của Git.
Chúc mừng
Chúc mừng sinh nhật. Hãy ngoan ngoãn nghe lời các bậc tiền bối và luôn khỏe mạnh thật lâu nhé.
Chúc mừng sinh nhật ^^
Đúng là một bài đăng khiến người ta thấy phấn khích một cách kỳ lạ.
Ý kiến Hacker News
Câu chuyện về nguồn gốc của Git thường có xu hướng mô tả Linus như một nhà tiên tri
Khoảng năm 2002, tôi đã có ý tưởng gắn mã hash duy nhất cho từng phần của dự án
Tôi bắt đầu dùng Git như một giải pháp thay thế cho ClearCase
Thật đáng ngạc nhiên khi Git mới chỉ 20 năm tuổi
Thật thú vị khi biết được bối cảnh lịch sử
Mục tiêu là tạo ra một công cụ cơ sở dữ liệu lịch sử tarball hiệu quả, chứ không có ý định làm ra một hệ thống quản lý phiên bản
Tôi mới biết rằng có thể ký commit bằng ssh key
Cảm ơn vì bài viết hữu ích, và xin giới thiệu một kho lưu trữ có phần nhập môn về cấu trúc nội bộ của Git
Ý tưởng muốn viết một bài blog về cộng tác qua mailing list nghe rất thú vị
Trong số nhiều hệ thống quản lý mã nguồn, Git có tính khả dụng tệ nhất nhưng lại là hệ thống tôi yêu thích nhất