Sự khác biệt lớn nhất giữa 1 sinh viên học làm phần mềm và 1 kĩ sư phần mềm là gì? Theo mình thì tính hiệu quả trong công việc chính là sự khác biệt lớn nhất. Ngoài những lý do về trình độ, kinh nghiệm thì một trong những lý do khiến các đàn anh luôn hiệu quả hơn nằm ở việc họ biết sử dụng các tools, công cụ một cách hợp lý. Version control chính là một trong những công cụ đó.
Một số từ cần hiểu
Repository: Đây là thuật ngữ dùng để chỉ 1 project được quản lý bởi version control.
Branch: Đây là thuật ngữ dùng để chỉ 1 version được bạn tạo ra.
Commit: khi bạn code xong một module nhỏ, bạn có thể commit code để version control tạo ra 1 mốc theo dõi (bạn sẽ có nhiều commit, commit giống như những version rất nhỏ trong project của bạn, bạn có thể quay lại các commit trước đó nếu muốn).
Version control là gì?
Version control được hiểu như 1 công cụ giúp bạn theo dõi sự thay đổi của toàn bộ cấu trúc chương trình, từ các file code cho đến các file hình ảnh, video. Với version control, bạn có thể tạo ra nhiều phiên bản của các file ứng với từng thay đổi mà bạn tạo ra.
Giả sử mình sử dụng version control để quản lý code cho dự án làm 1 website như ở hình trên, version control sẽ cho phép mình theo dõi sự thay đổi của các file theo thời gian, tạo ra các phiên bản khác nhau của dự án ứng với từng thay đổi.
Tại sao cần sử dụng Version control?
Ngoài lý do: “Thầy bắt buộc dùng version control khi làm đồ án” còn có rất nhiều lý do để bạn phải yêu thích version control.
Giả sử trường hợp bạn cần làm dự án theo team 3, 4 thành viên. Như vậy mỗi thành viên sẽ code một số module nhỏ, cuối cùng sẽ phải đến ngày gộp code. Có 2 trường hợp xảy ra, hoặc là team bạn phải ra quán coffee gộp code (như mình từng làm khi mới học code) hoặc team bạn sử dụng version control. Với công cụ này, mỗi thành viên team bạn có thể tạo ra 1 phiên bản riêng cho mình (branch) và làm việc độc lập trên đó, khi cần gộp code, bạn chỉ việc gộp 2 branch lại với nhau, mọi thứ đều được version control đánh dấu thời gian rõ ràng, công việc sẽ trở nên dễ dàng hơn rất nhiều.
Bạn cũng có thể tạo ra nhiều phiên bản production như hình trên, giả sử bạn cần làm 1 dự án phục vụ cho 10 đối tượng công ty, mỗi công ty cần những chỉnh sửa riêng, thay vì phải tạo ra 10 folder code chứa code riêng cho từng công ty, bạn có thể sử dụng version control, mọi thứ sẽ được lưu trữ trong 1 folder duy nhất, chuyển đổi giữa các version dễ dàng.
Ngoài, verson control còn giúp bạn theo dõi, phân tích tiến độ dự án, mức độ đóng góp của mỗi cá nhân vào dự án, cá nhân gây lỗi chương trình (bắt nó fix)…
Các loại version control
Có thể chia version control thành 2 loại chính: centralized version control system và distributed version control system.
The centralized version control system
Ở kiểu version control này, tất cả các folder, file của dự án sẽ nằm tập trung tại 1 server lớn duy nhất (Central Repository), tất cả các thành viên tham gia dự án có thể lấy code về (clone), chỉnh sửa code, sau đó commit trở lại central repository. Như vậy, tất cả các chức năng của 1 version control (theo dõi file, gộp code…) đều nằm ở central server, các thành viên tham gia chỉ đơn giản là sử dụng 1 chương trình client kết nối với central server thông qua network.
The distributed version control system
Trái ngược với kiểu version control phía trên, với distributed version control system, mỗi thành viên tham gia dự án sẽ có 1 local repository tại máy cá nhân của mình, mỗi người đều có thể tạo ra các branch, commit code, gộp code tại máy riêng của mình mà không ảnh hưởng gì đến central repository, không cần đến network. Sau đó, các thành viên có thể gộp local repository và central repository lại thành một thông qua phương thức push (với git).
Git
Git là 1 đại diện nổi bật của distributed version control system, bạn không nên nhầm lẫn giữa Git và Github. Trong khi Git là 1 version control rất phổ biến thì Github chỉ đơn thuần là 1 công ty cho phép bạn lưu trữ các Git repository mà thôi.
SVN
SVN là viết tắt của từ Subversion, đây là 1 version control cũng rất nổi tiếng, từng có giai đoạn bá chủ thế giới version control (gần đây Git đã chiếm thế thượng phong). SVN thuộc loại centralized version control system.
Tạm kết
Ở phạm vi bài viết này, mình chỉ giới thiệu các nội dung cơ bản nhất liên quan đến version control, mình vẫn chưa đề cập đến cách hoạt động cũng như cách sử dụng chúng. Mình hy vọng đem đến cho các bạn 1 góc nhìn tổng quan nhất về chủ đề này. Nếu được các bạn ủng hộ mình sẽ viết 1 bài chi tiết về cách sử dụng Git và SVN. Để lại góp ý để giúp mình cải thiện hơn nhé.
#ntechdevelopers