«web-truong-final-2-dùng-cái-này.html» — CLB Tin học từng có cả một đống file tên như vậy. Bài này kể vì sao đặt tên không phải là cách, và cuốn sổ nào mới thật sự nhớ được mọi phiên bản.
CLB Tin học đang cùng sửa trang web trường cho Hội chợ Khoa học.
Minh mở thư mục dùng chung trên máy tính phòng Tin, và thấy một cảnh tượng quen thuộc với ai từng làm việc nhóm:
Sáu cái tên, sáu file khác nhau. Và không một ai trong CLB — kể cả bạn viết ra file cuối cùng — còn nhớ chắc bản nào đang thật sự chạy trên mạng, bản nào là bản cũ nên xoá đi cho gọn.
Thử mở thư mục "Tài liệu" hay "Downloads" trên máy tính ở nhà — rất có thể em cũng có vài file tên kiểu «bai-van-2-sua-lai-that.docx». Không phải chỉ CLB Tin học mới bị vậy.
Rắc rối thật sự bắt đầu khi bản mới nhất bị lỗi.
Sáng thứ Hai, thầy Huy báo trang web trường bị lỗi hiển thị — chữ chồng lên nhau, ảnh Hội chợ Khoa học không hiện ra. CLB Tin học chắc chắn bản tuần trước vẫn chạy tốt, chỉ cần quay lại đúng bản đó là xong.
Vấn đề là: bản tuần trước là file nào trong sáu cái tên ở trên? Không ai dám chắc.
Bống thử đề nghị: "Hay đặt tên có ngày tháng vào, kiểu web-truong-2026-08-20.html?"
Nghe hợp lý — nhưng thầy Huy hỏi lại một câu khiến cả nhóm khựng lại:
"Được, nhưng nếu hai bạn cùng sửa file trong cùng một ngày thì sao? Và nếu tháng sau lại cần quay về đúng bản của giờ chiều nay, chứ không phải nguyên cả ngày, thì tên file kiểu đó có đủ không?"
Cả nhóm im lặng. Đặt tên theo ngày tháng đỡ hơn "final-final-2" thật, nhưng vẫn chỉ là một cách chữa cháy — không giải quyết được gốc rễ: làm sao lưu mọi thời điểm thay đổi, của mọi người, mà không phải tự tay đặt tên và nhớ từng cái?
Có công cụ nào tự làm việc "ghi lại mọi lần thay đổi" thay vì bắt con người phải tự đặt tên, tự nhớ không?
Vấn đề là đang dùng sai công cụ cho đúng việc.
Nếu đặt tên kiểu nào cũng không đủ, thì có cách nào để máy tự nhớ giùm mọi lần thay đổi, thay vì bắt con người tự ghi chú không?
Đặt tên file — dù khéo cỡ nào — vẫn là con người phải tự nhớ và tự ghi chú thủ công từng lần thay đổi. Việc đó, hoá ra, đã có sẵn một công cụ chuyên làm rất tốt.
Một công cụ tự động lưu lại mọi lần thay đổi, đúng thời điểm, đúng ai đã sửa gì — và cho phép quay lại bất kỳ mốc nào trong lịch sử đó, chỉ bằng một lệnh, không cần đoán tên file nào là đúng.
Công cụ đó tên là Git.
GIT là một hệ thống quản lý phiên bản (version control) — nó ghi lại lịch sử thay đổi của một tập tin hay cả một dự án theo thời gian, không cần con người tự đặt tên "final-2-thật" nữa.
Mỗi lần ai đó lưu một thay đổi vào Git, gọi là một commit — giống một mốc trong cuốn nhật ký, ghi rõ thời điểm, ai làm, và thay đổi gì.
Git không lưu nhiều bản sao file — nó lưu lại các lần thay đổi.
Khác với việc giữ hàng chục file trùng lặp kiểu "final-final-2", Git lưu từng lần thay đổi (commit) theo trình tự thời gian. Muốn xem bản của thứ Ba tuần trước? Chỉ cần quay về đúng commit đó — không cần tìm trong đống tên file.
Điểm mạnh nhất: nhiều người có thể cùng sửa một dự án song song mà không ghi đè mất công sức của nhau. Git giúp gộp (merge) các thay đổi của từng người lại một cách có kiểm soát — thay vì phải hỏi nhau qua nhóm chat "cậu sửa xong chưa, tớ gửi đè lên có được không".
Em có thể đã dùng một ý tưởng gần giống Git rồi, mà không biết.
Google Docs tự động lưu "lịch sử phiên bản" — cho phép mở lại đúng bài văn lúc 3 giờ chiều hôm qua, trước khi nó bị sửa hỏng bởi một cú gõ nhầm. Đó là một dạng ý tưởng quản lý phiên bản đơn giản, cùng tinh thần với Git, chỉ là nhỏ hơn và tự động hoàn toàn.
Không có công cụ như Git, làm việc nhóm trên cùng một file rất dễ rối.
Không có Git, hai người cùng sửa chung một file rất dễ ghi đè mất công sức của nhau, hoặc phải gửi qua lại hàng chục bản file qua nhóm chat — không ai chắc bản nào là bản mới nhất, y hệt tình cảnh CLB Tin học ở đầu bài.
Với những dự án phần mềm có hàng trăm, hàng nghìn người cùng sửa (như trình duyệt, mạng xã hội), không có công cụ quản lý phiên bản thì gần như không thể làm việc nhóm được ở quy mô đó.
Trước khi qua chặng cuối, thử tự kiểm nhanh xem mình đã nắm được bản chất chưa.
Các dự án phần mềm lớn (app, game, website) hầu như đều dùng Git để nhiều lập trình viên cùng làm việc. Nút "hoàn tác" (undo) nhiều lần trong một phần mềm vẽ hay Word cũng mang tinh thần tương tự — lưu lại lịch sử để quay lại được.
Chọn một đáp án cho mỗi câu — không chấm điểm, chỉ để em tự biết mình đã hiểu đúng chưa.
1. Git chủ yếu lưu lại điều gì?
2. Vì sao đặt tên file kiểu "final-2-thật" không thật sự giải quyết được vấn đề?
3. Git giúp ích gì nhất khi nhiều người cùng sửa một dự án?
Có điều gì về Git hay về việc lưu phiên bản mà em còn thắc mắc? Viết ra đây, không cần đúng/sai.
Cuộn nốt xuống dưới nhé — sắp xong trang này rồi!
Nếu chỉ nhớ một câu, hãy nhớ câu này.
Lần sau nhóm em làm việc chung một file mà không biết bản nào là bản mới nhất, thử kể lại câu chuyện "final-final-2-thật" của CLB Tin học — chắc chắn sẽ có người gật đầu lia lịa vì từng gặp y hệt.