All Articles

Git [phần 1] bài học vỡ lòng

Git

Nghề lập trình vốn được cho là ngành nghề hiện đại, nhưng bản chất thì vẫn là một ngành nghề thủ công. Những dòng code từ đơn giản đến phức tạp đều được xây dựng bởi bàn tay con người như ngành dệt may vậy! Tuy nhiên, ngành dệt may thì cũng từ sợi chỉ cây kim.. rồi sau này mới có phát minh máy kéo sợi của James Hargreaves trong cuộc cách mạng công nghiệp ở Anh và đưa ngành dệt may thế giới phát triển vượt bậc!

Trong bài chuỗi bài viết này mình sẽ nói vè Git, một trong những “máy kéo sợi” trong ngành lập trình - thời đại 4.0

Git

Git cùng với anh em của nó như SVN, Mercurial,.. thì được gọi là trình quản lý phiên bản (Version Control System - VCS). Vậy trước tiên để biết VCS nó là cái gì?.. thì hãy xem trước khi có VCS ae coder làm gì nhé.

Lưu ý: bài này có thể hơi dài đối với các bạn lười đọc nhưng mình sẽ giải thích tường tận cái gọi là Git này nhé. Let’s go!

1. Trước khi VCS ra đời:

Giả sử anh lập trình viên tạo dùng một đống các thuật toán bại não chỉ để in ra dòng Hello World như sau:

// HelloWorld.js let hello = String.fromCharCode(72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100); console.log(hello); // Hello World

ok! code in ra được Hello World nhưng sếp lại bảo chữ “world” phải viết thường cơ. Nhưng đoạn charCode trên quá lằng nhằng nên anh ta viết lại hoàn toàn cho nhanh

// HelloWorld.js let hello = String.fromCharCode(72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100); console.log(hello); // Hello world

Nhưng than ôi, cuộc đời bất công nên kéo hoài cộng lông không bao giờ thẳng! Lát sau anh sếp lại bảo: “Giờ anh thấy chữ ‘world’ viết hoa đẹp hơn nên chú sửa lại giùm anh nha!” Đến đây thì anh coder tội nghiệp phải code lại như ban đầu và đặt tên nó lại là HelloWorld2.js nhằm tránh trường hợp anh sếp lại thay lòng đổi dạ

Qua câu chuyện trên chúng ta thấy thằng anh coder đang thực hiện công việc quản lý phiên bản, nhưng lại theo cách thủ công nhất. Chắc hẳn không ít ae đọc bài viết này đã từng làm vậy rồi phải không nào?

Trở lại câu chuyện thực tế, khách hàng là thượng đế.. chúng ta không thể thay lấy gậy \ đập* khách hàng được :v nên bắt buộc chúng ta phải thay đổi*. Nhưng câu chuyện đặt tên file (‘HelloWorld-1.js’, ‘HelloWorld-2.js’, ‘HelloWorld-n.js’) của anh chàng phía trên không phải là cách hay. Vừa tốn bộ nhớ vừa khó quản lý. Từ đó Version Control System ra đời

Giải thích một cách hàn lâm thì

Hệ thống quản lý phiên bản - Version Control System (VCS) là các hệ thống chịu trách nhiệm quản lý các thay đổi đối với tài liệu, chương trình máy tính ,.. . Các thay đổi thường được xác định bằng một số hoặc mã chữ cái, được gọi là “số sửa đổi”, “mức sửa đổi” hoặc đơn giản là “sửa đổi”. Ví dụ: một tập hợp các tệp ban đầu là “phiên bản 1”. Khi thay đổi đầu tiên được thực hiện, tập kết quả là “phiên bản 2”, v.v. Mỗi sửa đổi được liên kết với dấu thời gian và người thực hiện thay đổi. Các bản sửa đổi có thể được so sánh, khôi phục và với một số loại tệp, hoặc hợp nhất theo Wikipedia

Hay giải thích theo các câu chuyện đam mỹ của tung khựa là: Ông lão năm ổng 70 tuổi có thể xuyên không về thời điểm ổng 22 tuổi để tỏ tình với người ổng yêu và nói “Em yêu anh”. Yao Ming :v

Trên đây là ví dụ vui về một chức năng cơ bản của VCS, thực ra nó còn rất nhiều chức năng khác nữa (Teamwork, debug, cấu hình môi trường development/production, v.v..). Lần lượt các chức năng mình sẽ đề cập trong series này.

2. Và đời ta có Git:

Sự ra đời của Git bắt đầu từ năm 2005. Vậy trước năm 2005 thì sao?? Chúng ta có BitKeeper dùng cho các dự án phát triển mã nguồn nhân Linux. Từ năm 2005, BitKeeperLinux đường ai nấy đi (nhờ có cuộc chia ly này mà giờ ae dev có Git free mà sài hehe), và cha đẻ của Linux là Linus Torvalds đã phát triển công cụ của riêng họ. Câu chuyện của Git bắt đầu từ đó, Git kế thừa & phát triển các chức năng của BitKeeper và cho ra một hệ thống mới:

  • Nhanh
  • Thiết kế đơn giản
  • Hỗ trợ tốt cho “phát triển phi tuyến tính” (non-linear development) - (hàng ngàn nhánh song song)
  • Phân tán toàn diện
  • Có khả năng xử lý các dự án lớn giống như nhân Linux một cách hiệu quả (về mặt tốc độ và khối lượng dữ liệu)

* Để hiểu 3 tiêu chí cuối cùng nó là cái gì thì mình sẽ giải thích trong các bài viết sau

2.1 Tiêu chí khi học Git:

Một số bạn có cách học về Git khá sai lầm đó là học về lệnh trước mà không hiểu rõ bản chất nó là gì. Vậy nên mình có một lời khuyên cho các bạn học Git là “hãy hiểu rõ bản chất những câu lệnh mà bạn dùng” và những nguyên tắc cơ bản của Git thì cũng từ những điều khá đơn giản mà ra, chỉ gần bạn chịu khó suy nghĩ một chút thôi là sẽ ngộ ra được chân lý :kk

2.2 Cài đặt Git:

Không khó lắm khi bạn cài đặt một tool nào đó nhất là Windows. Đây là trang chủ của nó, bạn chỉ việc download vào cài đặt. Đối với Linux thì các bạn chỉ cần chạy lệnh sau:

$ sudo apt install git # Đối với các distro của Debian như Ubuntu, Kali linux $ sudo yum install git # Đối với các distro của Redhat như CentOS

2.3 Tài liệu Git:

Thật không khó để tìm ra tài liệu về Git trên mạng và cả Series bài viết này cũng vậy. Nhưng tài liệu trên trang chủ chính là tài liệu chính thống đầy đủ và chi tiết nhất

3. Kết:

Trên đây là toàn bộ những sơ lược vể quá trình ra đời của Git, hẹn các bạn trong bài sau về loạt Series về Git