Quản lý phiên bản mã nguồn

Git

Kỹ năng bắt buộc của nghề lập trình, không có lựa chọn thay thế

Người mới thường học thuộc vài câu lệnh Git để làm việc hằng ngày, rồi hoảng loạn ngay lần đầu gặp tình huống ngoài kịch bản quen thuộc.

Miễn phí, mã nguồn mởKỹ năng bắt buộc của nghềKhái niệm khó với người mới
9.3
ĐIỂM TOPỨNGDỤNG
Hạng #2 trong nhóm Developer & lập trình
Nhà phát triển
Git Project
Nền tảng
Windows · macOS · Linux
Giá
Miễn phí hoàn toàn, mã nguồn mở · Không có phiên bản trả phí · Windows, macOS, Linux
Ngôn ngữ
English (giao diện dòng lệnh)
NGƯỜI DÙNG CHẤM

Bạn đánh giá Git thế nào?

Điểm này độc lập với điểm của ban biên tập và quyết định thứ hạng ở tab “Người dùng bình chọn”.

Chưa có bình chọn
Bạn thấy sao?
Không cần đăng nhập. Mỗi người một phiếu, đổi lại được.
CHẤM ĐIỂM

Điểm từng tiêu chí

Điểm tổng là trung bình có trọng số của các tiêu chí bên dưới.

Làm việc nhóm
9.8
Lưu lịch sử thay đổi
9.8
Chi phí
10
Dễ với người mới
5.5
Xử lý tệp nhị phân
6
REVIEW

Đánh giá chi tiết Git

Trả lời ngắn: Git không phải phần mềm bạn chọn dùng hay không — mọi công ty phần mềm đều dùng nó, nên đây là thứ phải học trước khi đi xin việc.

Khó khăn thật: không nằm ở việc nhớ lệnh mà ở việc hiểu mô hình hoạt động bên dưới.

Vì sao người mới thấy Git khó?

Phần lớn phần mềm có thể học bằng cách mò: bấm thử các nút, xem chuyện gì xảy ra, dần dần hiểu ra.

Công cụ này thì không. Các lệnh của nó thao tác trên một mô hình trừu tượng gồm ảnh chụp trạng thái, con trỏ và nhánh — và nếu bạn chưa hiểu mô hình đó thì mọi lệnh đều như phép thuật.

Hệ quả là người mới học thuộc lòng vài câu lệnh để làm việc hằng ngày, rồi hoảng loạn khi gặp tình huống ngoài kịch bản quen thuộc.

Cách học hiệu quả là ngược lại: dành hai giờ hiểu ba khái niệm cốt lõi trước, sau đó các lệnh trở nên hiển nhiên và bạn tự suy ra được cách xử lý tình huống lạ.

Git làm được gì?

ViệcMức độGhi chú
Lưu lại toàn bộ lịch sử thay đổi mã nguồnTốt nhấtQuay về bất kỳ thời điểm nào trong quá khứ
Nhiều người làm chung mà không đè lên nhauTốt nhấtLý do nó trở thành tiêu chuẩn ngành
Thử nghiệm trên nhánh riêng rồi bỏ nếu hỏngTốt nhấtKhông ảnh hưởng mã đang chạy
Tìm ra thay đổi nào gây lỗiRất tốtCó công cụ dò nhị phân qua lịch sử
Hoạt động hoàn toàn ngoại tuyếnRất tốtToàn bộ lịch sử nằm trên máy bạn
Miễn phí, mã nguồn mởRất tốtKhông có phiên bản trả phí
Đường học với người mớiKémKhái niệm trừu tượng, thông báo lỗi khó hiểu
Xử lý tệp nhị phân lớnKháẢnh và video làm kho phình nhanh
Giao diện dòng lệnhKháCần công cụ đồ hoạ nếu bạn ngại gõ lệnh

Ai nên học Git?

  • Mọi người làm nghề lập trình — không có ngoại lệ, đây là yêu cầu tối thiểu.
  • Người viết tài liệu kỹ thuật — nhiều nhóm quản lý tài liệu bằng cùng công cụ.
  • Ai làm phân tích dữ liệu — để lưu lại phiên bản mã xử lý và mô hình.
  • Người tự học lập trình muốn xin việc — nhà tuyển dụng mặc định bạn đã biết.

Chưa cần nếu bạn chỉ dùng máy cho công việc văn phòng — Google Drive đã có lịch sử phiên bản đủ dùng cho tài liệu.

Ba khái niệm cần hiểu trước khi học lệnh

Hiểu ba thứ này rồi thì phần lớn lệnh tự giải thích được.

Khái niệmHiểu đơn giản là gì
Bản ghi thay đổiMột ảnh chụp toàn bộ dự án tại một thời điểm
NhánhMột con trỏ chỉ vào một ảnh chụp cụ thể
Khu vực chuẩn bịChỗ bạn chọn ra những thay đổi nào sẽ vào ảnh chụp tiếp theo
Kho từ xaMột bản sao của kho đặt trên máy chủ để cả nhóm đồng bộ
Gộp nhánhĐưa các thay đổi từ nhánh này sang nhánh kia
Xung độtKhi hai người sửa cùng một dòng và công cụ không tự quyết được
Khái niệm khiến người mới bối rối nhất là nhánh, vì tên gọi gợi ý một thứ nặng nề giống như chép cả dự án ra thư mục mới. Thực tế nó chỉ là một con trỏ nhỏ chỉ vào một ảnh chụp — tạo ra hay xoá đi đều tức thì và gần như không tốn dung lượng. Hiểu đúng điều này thay đổi cách bạn làm việc: bạn sẽ tạo nhánh cho mọi thứ, kể cả để thử một ý tưởng trong mười phút, thay vì ngại vì tưởng nó tốn kém.

Quy trình làm việc cơ bản hằng ngày

  1. Kéo về thay đổi mới nhất từ kho chung (2 phút) — Làm đầu mỗi buổi để tránh xung đột lớn.
  2. Tạo nhánh riêng cho việc bạn sắp làm (1 phút) — Không sửa thẳng trên nhánh chính.
  3. Viết mã và ghi lại thay đổi theo từng bước nhỏ (liên tục) — Mỗi bản ghi một việc.
  4. Viết mô tả rõ ràng cho từng bản ghi (mỗi lần) — Người đọc là bạn của sáu tháng sau.
  5. Đẩy nhánh lên kho chung và mở yêu cầu gộp (10 phút) — Để đồng nghiệp xem lại.
  6. Xoá nhánh sau khi đã gộp (1 phút) — Giữ danh sách nhánh gọn gàng.

Vì sao mô tả bản ghi thay đổi lại quan trọng?

Đây là thói quen phân biệt người làm việc chuyên nghiệp với người mới, và giá trị của nó chỉ lộ ra sau vài tháng.

Rất nhiều người ghi mô tả kiểu sửa lỗi, cập nhật, hoặc thậm chí chỉ một dấu chấm. Lúc viết thì bạn biết mình vừa làm gì nên thấy không cần ghi chi tiết.

Sáu tháng sau, khi có lỗi và bạn phải dò lại xem thay đổi nào gây ra nó, bạn nhìn vào một danh sách hai trăm dòng mô tả chung chung và không có manh mối nào.

Một mô tả tốt trả lời câu hỏi tại sao chứ không phải cái gì — vì phần cái gì đã nằm trong bản thân đoạn mã rồi. Ví dụ thay vì ghi sửa hàm tính giá, hãy ghi làm tròn giá theo đơn vị nghìn đồng để khớp với yêu cầu kế toán. Câu sau tiết kiệm cho ai đó nửa giờ điều tra.

Hạn chế cần biết

Đường học dốc với người mới

Khái niệm trừu tượng và thông báo lỗi không thân thiện.

Không hợp với tệp nhị phân lớn

Ảnh, video và tệp thiết kế làm kho phình rất nhanh.

Thao tác sửa lịch sử dễ gây rắc rối

Một số lệnh viết lại lịch sử có thể ảnh hưởng cả nhóm.

Cần công cụ đồ hoạ nếu ngại dòng lệnh

Bản gốc chỉ có giao diện dòng lệnh.

Không tự giải quyết được xung đột phức tạp

Vẫn cần người đọc và quyết định giữ phần nào.

Git so với các cách quản lý phiên bản khác

Tiêu chíGitChép thư mục thủ côngLịch sử của dịch vụ đám mây
Nhiều người làm chungTốt nhấtKémKhá
Lưu lịch sử chi tiếtTốt nhấtKémTốt
Thử nghiệm không ảnh hưởng bản chínhTốt nhấtKháKém
Dễ với người mớiKémTốt nhấtRất tốt
Hợp với tệp nhị phân lớnKháTốtTốt nhất
Chi phíMiễn phíMiễn phíTuỳ gói

Xem thêm đánh giá GitHub, đánh giá GitLab, đánh giá Visual Studio Code, hoặc duyệt nhóm công cụ lập trình.

Kết luận

Git là kỹ năng bắt buộc của nghề lập trình, và cũng là thứ hữu ích cho bất kỳ ai làm việc với tệp văn bản cần lưu lịch sử.

Cách học đúng là đầu tư hai giờ hiểu mô hình bên dưới trước khi học lệnh. Nếu bạn học thuộc lệnh mà chưa hiểu ảnh chụp và con trỏ là gì, bạn sẽ mắc kẹt ngay lần đầu gặp tình huống lạ.

Và hãy tập thói quen viết mô tả thay đổi cho tử tế ngay từ đầu. Đó là món quà bạn gửi cho chính mình của sáu tháng sau, khi phải quay lại tìm hiểu vì sao đoạn mã này lại được viết như vậy.

Về bài đánh giá này: Git là phần mềm mã nguồn mở miễn phí; danh sách lệnh và hành vi mặc định có thay đổi giữa các phiên bản. Kiểm tra thông tin hiện hành tại trang chủ Git.
ĐÁNH GIÁ

Điểm mạnh & điểm yếu

Điểm mạnh

  • Lưu toàn bộ lịch sử thay đổi và quay về bất kỳ thời điểm nào
  • Nhiều người sửa cùng dự án mà không đè lên phần việc của nhau
  • Tạo nhánh thử nghiệm gần như không tốn dung lượng
  • Hoạt động đầy đủ khi không có mạng vì lịch sử nằm trên máy bạn
  • Là yêu cầu tối thiểu ở mọi vị trí tuyển dụng ngành phần mềm

Điểm yếu

  • Mô hình ảnh chụp và con trỏ rất trừu tượng với người mới
  • Thông báo lỗi dùng thuật ngữ nội bộ, khó đoán phải làm gì tiếp
  • Kho phình rất nhanh khi lưu ảnh, video hoặc tệp thiết kế
  • Vài lệnh viết lại lịch sử có thể gây rối cho cả nhóm nếu dùng sai
  • Bản gốc chỉ có dòng lệnh, muốn giao diện phải cài thêm phần mềm
Phù hợp nhất với
Người học lập trình chuẩn bị đi xin việcNhóm phát triển phần mềm mọi quy môNgười làm phân tích dữ liệu cần lưu phiên bản mã xử lýNhóm quản lý tài liệu kỹ thuật bằng tệp văn bản
HỎI ĐÁP

Câu hỏi thường gặp

Vì sao người mới thấy Git khó hơn phần mềm khác?

Vì bạn không mò ra được bằng cách bấm thử các nút — các lệnh thao tác trên một mô hình trừu tượng mà bạn phải hiểu trước.

Ba khái niệm cần hiểu trước là gì?

Bản ghi thay đổi là ảnh chụp toàn bộ dự án, nhánh là con trỏ chỉ vào một ảnh chụp, khu vực chuẩn bị là nơi bạn chọn thay đổi nào sẽ vào ảnh chụp kế tiếp.

Vì sao nhiều người hiểu sai về nhánh?

Vì tên gọi gợi ý một thứ nặng nề giống chép cả dự án ra thư mục mới, trong khi thực tế nó chỉ là một con trỏ nhỏ.

Hiểu đúng điều đó thay đổi cách làm việc thế nào?

Bạn sẽ tạo nhánh cho mọi thứ, kể cả để thử một ý tưởng trong mười phút, thay vì ngại vì tưởng nó tốn kém.

Mô tả bản ghi thay đổi nên viết ra sao?

Trả lời câu hỏi tại sao chứ không phải cái gì, vì phần cái gì đã nằm sẵn trong đoạn mã rồi.

Cho một ví dụ cụ thể được không?

Thay vì ghi sửa hàm tính giá, hãy ghi làm tròn giá theo đơn vị nghìn đồng để khớp với yêu cầu kế toán.

Khi nào thì thấy được giá trị của thói quen đó?

Sáu tháng sau, lúc phải dò xem thay đổi nào gây ra lỗi và bạn nhìn vào một danh sách hai trăm dòng mô tả.

Vì sao không nên đưa ảnh và video vào kho Git?

Vì mỗi phiên bản của tệp nhị phân được lưu gần như trọn vẹn, nên kho phình rất nhanh và mọi thao tác chậm dần.

Người chỉ làm việc văn phòng có cần học không?

Chưa cần — lịch sử phiên bản của các dịch vụ lưu trữ đám mây đã đủ dùng cho tài liệu thông thường.

KẾT LUẬN

Hãy dành hai giờ hiểu ảnh chụp, con trỏ và khu vực chuẩn bị trước khi học lệnh — sau đó phần lớn câu lệnh tự giải thích được.