1. Version Controll hay Soure Controll là gì ? Các loại Version Control
1.1. Version Controll hay Soure Controll 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 theo thời gian. 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.
Nếu bạn là một nhà thiết kế đồ họa hoặc web và muốn giữ mọi phiên bản của hình ảnh hoặc bố cục (mà bạn chắc chắn muốn có nhất), Hệ thống kiểm soát phiên bản (VCS – Version Control System) là một điều rất khôn ngoan khi sử dụng. Nó cho phép bạn hoàn nguyên các tệp đã chọn về trạng thái trước đó, hoàn nguyên toàn bộ dự án về trạng thái trước đó, so sánh các thay đổi theo thời gian, xem ai đã sửa đổi lần cuối cùng điều gì đó có thể gây ra sự cố, ai đã đưa ra sự cố và khi nào, v.v. Sử dụng VCS nói chung cũng có nghĩa là nếu bạn làm hỏng mọi thứ hoặc làm mất tệp, bạn có thể dễ dàng khôi phục. Ngoài ra, bạn nhận được tất cả những điều này với chi phí rất ít.
1.2. Các loại Version Control
1.2.1. Local Version Control Systems (Hệ thống kiểm soát phiên bản cục bộ )
Ở loại này thì phần mềm Version Control sẽ kiểm tra hoạt động của các file ở máy tính cá nhân của chúng ta. Cách tiếp cận này rất phổ biến vì nó rất đơn giản, nhưng nó cũng rất dễ xảy ra lỗi. Rất dễ quên bạn đang ở thư mục nào và vô tình ghi nhầm vào tệp hoặc sao chép qua các tệp mà bạn không cố ý.
Để giải quyết vấn đề này, từ lâu, các lập trình viên đã phát triển các VCS cục bộ có cơ sở dữ liệu đơn giản giữ tất cả các thay đổi đối với tệp dưới sự kiểm soát sửa đổi.
Một trong những công cụ VCS phổ biến nhất là hệ thống có tên RCS, hệ thống này vẫn còn được phân phối trên nhiều máy tính ngày nay. RCS hoạt động bằng cách giữ các bộ bản vá (nghĩa là sự khác biệt giữa các tệp) ở một định dạng đặc biệt trên đĩa; sau đó nó có thể tạo lại bất kỳ tệp nào trông giống như thế nào tại bất kỳ thời điểm nào bằng cách thêm tất cả các bản vá.
1.2.2. Centralized Version Control Systems (Hệ thống kiểm soát phiên bản tập trung)
Vấn đề lớn tiếp theo mà mọi người gặp phải là họ cần cộng tác với các nhà phát triển trên các hệ thống khác. Để giải quyết vấn đề này, Hệ thống kiểm soát phiên bản tập trung (CVCS – Centralized Version Control Systems) đã được phát triển. Các hệ thống này (chẳng hạn như CVS, Subversion và Perforce) có một máy chủ duy nhất chứa tất cả các tệp được tạo phiên bản và một số máy khách kiểm tra tệp từ vị trí trung tâm đó. Trong nhiều năm trước đây, thì CVCS là tiêu chuẩn để kiểm soát phiên bản.
Thiết lập này mang lại nhiều lợi thế, đặc biệt là so với các VCS cục bộ. Ví dụ, mọi người đều biết ở một mức độ nhất định những gì mọi người khác trong dự án đang làm. Quản trị viên có quyền kiểm soát chi tiết đối với ai có thể làm những gì và việc quản lý CVCS dễ dàng hơn nhiều so với việc xử lý cơ sở dữ liệu cục bộ trên mọi máy khách.
Tuy nhiên, thiết lập này cũng có một số nhược điểm nghiêm trọng. Rõ ràng nhất là điểm lỗi duy nhất mà máy chủ tập trung đại diện. Nếu máy chủ đó gặp sự cố trong một giờ, thì trong giờ đó, không ai có thể cộng tác hoặc lưu các thay đổi đã tạo phiên bản cho bất kỳ thứ gì họ đang làm. Nếu đĩa cứng mà cơ sở dữ liệu trung tâm đang sử dụng bị hỏng và các bản sao lưu thích hợp không được lưu giữ, bạn sẽ mất hoàn toàn mọi thứ - toàn bộ lịch sử của dự án ngoại trừ bất kỳ ảnh chụp nhanh nào mà mọi người tình cờ có trên máy cục bộ của họ. Các VCS trên máy tính cá nhân cũng gặp phải vấn đề này - bất cứ khi nào bạn có toàn bộ lịch sử của dự án ở một nơi duy nhất, bạn có nguy cơ mất tất cả.
1.2.3. Distributed Version Control Systems (Hệ thống kiểm soát phiên bản phân tán)
Đây là lúc Hệ thống Kiểm soát Phiên bản Phân tán (DVCS) ra đời. Trong một DVCS (Distributed Version Control Systems – Hệ thống kiểm soát phiên bản phân tán) chẳng hạn như Git, Mercurial, Bazaar hoặc Darcs….Khách hàng không chỉ kiểm tra snapshot nhanh mới nhất của các tệp; thay vào đó, chúng phản ánh đầy đủ kho lưu trữ, bao gồm toàn bộ lịch sử của nó. Do đó, nếu bất kỳ máy chủ nào bị chết và các hệ thống này đang cộng tác thông qua máy chủ đó, thì bất kỳ kho lưu trữ máy khách nào cũng có thể được sao chép sao lưu vào máy chủ để khôi phục nó. Mỗi bản sao thực sự là một bản sao lưu đầy đủ của tất cả dữ liệu.
Hơn nữa, nhiều hệ thống trong số này giải quyết khá tốt việc có một số kho lưu trữ từ xa mà chúng có thể làm việc, vì vậy bạn có thể cộng tác với các nhóm người khác nhau theo những cách khác nhau đồng thời trong cùng một dự án. Điều này cho phép bạn thiết lập một số loại quy trình công việc không thể thực hiện được trong các hệ thống tập trung, chẳng hạn như mô hình phân cấp.
1.1. Version Controll hay Soure Controll 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 theo thời gian. 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.
Nếu bạn là một nhà thiết kế đồ họa hoặc web và muốn giữ mọi phiên bản của hình ảnh hoặc bố cục (mà bạn chắc chắn muốn có nhất), Hệ thống kiểm soát phiên bản (VCS – Version Control System) là một điều rất khôn ngoan khi sử dụng. Nó cho phép bạn hoàn nguyên các tệp đã chọn về trạng thái trước đó, hoàn nguyên toàn bộ dự án về trạng thái trước đó, so sánh các thay đổi theo thời gian, xem ai đã sửa đổi lần cuối cùng điều gì đó có thể gây ra sự cố, ai đã đưa ra sự cố và khi nào, v.v. Sử dụng VCS nói chung cũng có nghĩa là nếu bạn làm hỏng mọi thứ hoặc làm mất tệp, bạn có thể dễ dàng khôi phục. Ngoài ra, bạn nhận được tất cả những điều này với chi phí rất ít.
1.2. Các loại Version Control
1.2.1. Local Version Control Systems (Hệ thống kiểm soát phiên bản cục bộ )
Ở loại này thì phần mềm Version Control sẽ kiểm tra hoạt động của các file ở máy tính cá nhân của chúng ta. Cách tiếp cận này rất phổ biến vì nó rất đơn giản, nhưng nó cũng rất dễ xảy ra lỗi. Rất dễ quên bạn đang ở thư mục nào và vô tình ghi nhầm vào tệp hoặc sao chép qua các tệp mà bạn không cố ý.
Để giải quyết vấn đề này, từ lâu, các lập trình viên đã phát triển các VCS cục bộ có cơ sở dữ liệu đơn giản giữ tất cả các thay đổi đối với tệp dưới sự kiểm soát sửa đổi.
Một trong những công cụ VCS phổ biến nhất là hệ thống có tên RCS, hệ thống này vẫn còn được phân phối trên nhiều máy tính ngày nay. RCS hoạt động bằng cách giữ các bộ bản vá (nghĩa là sự khác biệt giữa các tệp) ở một định dạng đặc biệt trên đĩa; sau đó nó có thể tạo lại bất kỳ tệp nào trông giống như thế nào tại bất kỳ thời điểm nào bằng cách thêm tất cả các bản vá.
1.2.2. Centralized Version Control Systems (Hệ thống kiểm soát phiên bản tập trung)
Vấn đề lớn tiếp theo mà mọi người gặp phải là họ cần cộng tác với các nhà phát triển trên các hệ thống khác. Để giải quyết vấn đề này, Hệ thống kiểm soát phiên bản tập trung (CVCS – Centralized Version Control Systems) đã được phát triển. Các hệ thống này (chẳng hạn như CVS, Subversion và Perforce) có một máy chủ duy nhất chứa tất cả các tệp được tạo phiên bản và một số máy khách kiểm tra tệp từ vị trí trung tâm đó. Trong nhiều năm trước đây, thì CVCS là tiêu chuẩn để kiểm soát phiên bản.
Thiết lập này mang lại nhiều lợi thế, đặc biệt là so với các VCS cục bộ. Ví dụ, mọi người đều biết ở một mức độ nhất định những gì mọi người khác trong dự án đang làm. Quản trị viên có quyền kiểm soát chi tiết đối với ai có thể làm những gì và việc quản lý CVCS dễ dàng hơn nhiều so với việc xử lý cơ sở dữ liệu cục bộ trên mọi máy khách.
Tuy nhiên, thiết lập này cũng có một số nhược điểm nghiêm trọng. Rõ ràng nhất là điểm lỗi duy nhất mà máy chủ tập trung đại diện. Nếu máy chủ đó gặp sự cố trong một giờ, thì trong giờ đó, không ai có thể cộng tác hoặc lưu các thay đổi đã tạo phiên bản cho bất kỳ thứ gì họ đang làm. Nếu đĩa cứng mà cơ sở dữ liệu trung tâm đang sử dụng bị hỏng và các bản sao lưu thích hợp không được lưu giữ, bạn sẽ mất hoàn toàn mọi thứ - toàn bộ lịch sử của dự án ngoại trừ bất kỳ ảnh chụp nhanh nào mà mọi người tình cờ có trên máy cục bộ của họ. Các VCS trên máy tính cá nhân cũng gặp phải vấn đề này - bất cứ khi nào bạn có toàn bộ lịch sử của dự án ở một nơi duy nhất, bạn có nguy cơ mất tất cả.
1.2.3. Distributed Version Control Systems (Hệ thống kiểm soát phiên bản phân tán)
Đây là lúc Hệ thống Kiểm soát Phiên bản Phân tán (DVCS) ra đời. Trong một DVCS (Distributed Version Control Systems – Hệ thống kiểm soát phiên bản phân tán) chẳng hạn như Git, Mercurial, Bazaar hoặc Darcs….Khách hàng không chỉ kiểm tra snapshot nhanh mới nhất của các tệp; thay vào đó, chúng phản ánh đầy đủ kho lưu trữ, bao gồm toàn bộ lịch sử của nó. Do đó, nếu bất kỳ máy chủ nào bị chết và các hệ thống này đang cộng tác thông qua máy chủ đó, thì bất kỳ kho lưu trữ máy khách nào cũng có thể được sao chép sao lưu vào máy chủ để khôi phục nó. Mỗi bản sao thực sự là một bản sao lưu đầy đủ của tất cả dữ liệu.
Hơn nữa, nhiều hệ thống trong số này giải quyết khá tốt việc có một số kho lưu trữ từ xa mà chúng có thể làm việc, vì vậy bạn có thể cộng tác với các nhóm người khác nhau theo những cách khác nhau đồng thời trong cùng một dự án. Điều này cho phép bạn thiết lập một số loại quy trình công việc không thể thực hiện được trong các hệ thống tập trung, chẳng hạn như mô hình phân cấp.