2.5 Hệ thống quản lý phiên ban mã nguồn
2.5.2 Hệ thống quan lý phiên bản
2.5.2.3 Lợi ích của hệ thong quản lý mã nguồn
Lưu trữ mã nguồn tập trung
Lợi ích chính của hệ thống quản lý mã nguồn là tạo ra môi trường lưu trữ tập trung các tập tin, mã nguồn của dự án, giải quyết được các vấn đề dư thừa dữ liệu cũng như tìm kiếm nội dung lưu trữ. Nó cũng cho phép các thành viên trong nhóm phát triển chia
sẻ một số tập tin cho nhau trong khi phát triển và các thành viên có thể phát hiện lỗi cũng như sửa lỗi cho nhau một cách thuận tiện. Việc lưu trữ theo cách truyền thống sẽ làm dữ liệu trở nên dư thừa, tốn dung lượng lưu trữ cùng một tập tin giống nhau nhiều lần. Nhiều phiên bản khác nhau được đặt tên không theo tiêu chuẩn cũng sẽ gây nhiều khó khăn trong việc tìm kiếm, xác định phiên bản, và không thể xác định được đã có thay đổi gì trong mã nguồn.
Tao môi trường làm việc nhóm
Với cách làm truyền thống, mỗi người trong dự án làm việc độc lập với nhau, phải sao chép một bộ mã nguồn và phải thường xuyên liên hệ thông báo cho nhau mình đang chỉnh sửa phần nào trong mã nguồn. Điều này rất dễ gây ra sự nhầm lẫn, sai sót, chỉnh sửa trùng hoặc xóa phan chỉnh sửa của nhau, làm ảnh hưởng đến tiến độ dự án.
Hệ thống quan lý mã nguồn sẽ khắc phục tat cả các vấn đề tồn tại với cách làm truyền thống. Nó sẽ tạo ra một môi trường làm việc tập trung để mọi thành viên tham gia dự án có thể tương tác, phối hợp với nhau, tránh việc thực hiện công việc trùng lặp, chồng chéo lẫn nhau. Người quản lý có thể quản lý mã nguồn, điều hành, tổng hợp công việc của nhóm. Lập trình viên tham gia các nhóm làm dự án có thể quản lý mã nguồn của mình, chia sẻ cũng như tiếp nhận mới mã nguồn từ đồng nghiệp, nâng cao
hiệu quả công việc.
Lưu vết các thay đổi trong mã nguồn
Không chỉ có chức năng lưu trữ tập tin, mã nguồn, hệ thống quản lý phiên bản còn
cho phép lưu trữ các thay đổi trong quá trình thực hiện dự án. Các thay đổi được lưu lại không chỉ là tạo mới, xóa tập tin mà còn có nội dung bị thay đổi trong tập tin mã nguôn. Mỗi lần có các thay đổi trong mã nguồn dự án, VCS sẽ cung cấp thông tin về mục dich thay đổi, phần nào của mã nguồn bi thay đổi, người thực hiện thay đổi,... Các lần thay đổi sẽ được lưu trữ trong suốt quá trình thực hiện dự án, cho phép lập trình viên quay trở lại phiên bản trước đó néu có phát sinh lỗi hoặc các van đề không mong muốn trong mã nguồn.
Với việc sử dụng hệ thống quản lý phiên bản trong quá trình thực hiện dự án, chức năng lưu vết các lần thay đổi trong mã nguồn sẽ giúp người quản lý theo dõi tiến trình làm dự án, giúp lập trình viên dễ tiếp cận, dễ tìm hiểu về mã nguồn khi được giao thực hiện dự án, giúp nâng cao hiệu quả công việc và tăng tốc độ thực hiện dự án.
2.5.3. Git
Linux kernel là một dự án phần mềm mã nguồn mở có phạm vi khá lớn. Trong khoảng những năm 1991-2002, những thay đổi của dự án Linux kernel được truyền đi dưới dạng các bản vá và các tập tin lưu trữ. Vào 2002, dự án Linux kernel bắt đầu sử dụng một hệ thống quản lý phiên bản có tên là BitKeeper. Tuy nhiên, vào năm 2005, sự hợp tác giữa cộng đồng phát triển Linux kernel và công ty phát triển BitKeeper bị hủy
bỏ nên Linux kernel không còn được sử dụng miễn phí BitKeeper nữa. Linus Torvalds
- người sáng tạo ra Linux kernel - muốn có một hệ thống phân tán với các tính năng tương tự như BitKeeper, nhưng không có hệ thống miễn phí nào đáp ứng được nhu cầu này. Điều này đã thúc đẩy Linus Torvalds phát triển Git dựa trên những bài học từ việc
sử dụng BitKeeper với mục tiêu đạt được những ưu điểm như: Tốc độ nhanh, thiết kế đơn giản, có khả năng xử lý cho cả các dự án lớn, hoàn toàn phân tán, có thể tạo nhiều
nhánh (branch) và thao tác nó trên cùng một lúc [37].
Mã nguồn ứng dụng (Source Code) là thành phần cơ bản và quan trọng nhất của
một phần mềm được tạo ra bởi các lập trình viên khi sử dụng một ngôn ngữ lập trình nhất định. Git là một hệ thống quản lý phiên bản mã nguồn phân tán dùng để quản lý
và kiểm tra các phiên bản source code khác nhau trong quá trình phát triển phần mềm. Thiết kế của Git là sự tổng hợp những kinh nghiệm thực tế của Torvalds trong việc quản lý các dự án phân tán lớn, cùng với kiến thức sâu rộng của ông về hiệu suất hệ thống. Từ những yếu tố trên, Git được thiết kế mang đặc trưng của một hệ thống quản
lý phiên bản mã nguồn phân tán, một số các đặc trưng đó bao gồm:
+ Hỗ trợ mạnh mẽ trong việc phát triển phần mềm phi tuyến tinh: Git hỗ trợ
phân nhánh (branching) và hợp nhất nhánh (merging) một cách nhanh chóng.
Nó bao gồm các công cụ để hiển thị và xử lý lịch sử phát triển của các nhánh (branch). Cốt lõi của Git là các nhánh (branch) sẽ được hợp nhất (merge) thường xuyên hơn, vì nó sẽ được chuyển cho nhiều người để kiểm tra và đánh giá. Trong Git, các nhánh sẽ rất gọn nhẹ, một nhánh (branch) sẽ chỉ tham chiều đến một
commit.
+ Phát triển phân tán: Git cho phép mỗi lập trình viên có một bản sao mã nguồn
dự án trong kho lưu trữ trên môi trường cá nhân của họ, với các thay đổi có thể được lưu lại theo phiên bản. Những thay đổi này sẽ được đưa lên nhánh chính và hợp nhất vào mã nguồn chính thức nếu cần thiết.
5 Kha năng tương thích với các hệ thống và giao thức hiện nay: Các kho lưu trữ
(repository) trên Git có thể được công bồ thông qua giao thức HTTP, FTP hoặc SSH. Git cũng cho phép một số IDE thường được sử dụng hiện nay truy cập các
kho lưu trữ (repository) của Git.
5 Xử lý hiệu quả các dự án lớn: Git có thể truy xuất lại các phiên bản mã nguồn trước đó trong một kho lưu trữ cục bộ với tốc độ nhanh hơn gấp một trăm lần so với truy xuất chúng trong một kho lưu trữ từ xa.
41
Git lưu dữ liệu dưới dạng một loạt dnh chụp (snapshot) của một tập hợp các tập
tin, điều này có nghĩa là mỗi khi lập trình viên commit (lưu lại) thì Git tiến hành chụp lại hệ thống các tập tin tại thời điểm đó và lưu giữ một tham chiếu đến ảnh chụp đó. Nếu tập tin không bị thay đổi thì Git sẽ không lưu lại tập tin đó lần nữa. Mọi tập tin
mã nguồn trước khi được lưu trữ vào Git đều được kiểm tra mã băm (hash, checksum), điều này có nghĩa là không có sự thay đổi nào về nội dung tập tin mà Git không biết.
Git sử dụng mã hash SHA-1 với độ dài mã là 40 ký tự. Chức năng này giúp đảm bao tính toàn vẹn của dif liệu được lưu trữ trong Git.
Git hoạt động trên cả ba nền tảng lớn là Windows, MacOS và Linux. Git có thể được sử dụng độc lập (với giao diện dòng lệnh và giao diện dé họa) hoặc tích hợp trong các công cụ hỗ trợ phát triển phần mềm (IDE).
Mỗi tập tin trong Git được quản lý dựa trên ba trạng thái: Committed, modified và
staged.
* Modified: Tập tin mã nguồn đã được chỉnh sửa nhưng chưa commit vào kho lưu
trữ dit liệu.
* Staged: Phiên bản hiện tại của tập tin mã nguồn đã chỉnh sửa được đánh dấu để chuẩn bị cho lần commit tiếp theo.
* Committed: Tập tin mã nguồn đã được lưu trữ một cách an toàn trong kho lưu
trữ dữ liệu.
Một dự án sử dụng Git bao gồm ba phần riêng biệt: Thư mục Git, thư mục làm việc
và khu vực tổ chức.
5 Thư mục Git (Git Directory): Thư mục Git là nơi Git lưu trữ các siêu dit liệu
(metadata) của dự án. Day là phần quan trọng nhất của Git.
* Thư mục làm việc (Working Directory): Thư mục làm việc chứa bản sao một
phiên bản của dự án. Lập trình viên sẽ thực hiện những thay đổi trên các tập tin
trong thu mục này.
+ Khu vực tổ chức (Staging Area): Khu vực tổ chức là một tập tin đơn giản được
chứa trong thư mục Git, nó chứa thông tin về những gi sẽ được commit trong lần commit sắp tới.
Workin (dt
Staging Area
„git directory
(Repository)
Checkout the project
Stage Fixes
Hình 2.11: Thư mục Git, thư mục làm việc và khu vực tổ chức.
Tiến trình công việc (workflow) cơ bản với ba thành phần của Git được thể hiện
trong hình 2.11:
* Lập trình viên thay đổi các tập tin trong thư mục làm việc.
+ Lập trình viên tổ chức các tập tin muốn commit, tạo mới ảnh chụp (snapshot) của các tập tin đó vào khu vực tổ chức.
4
s Lập trình viên thực hiện commit, ảnh chụp (snapshot) của các tập tin trong khu
vực tổ chức sẽ được lưu trữ vĩnh viễn vào thư mục Git.
2.5.4. GitLab
GitLab là một hệ thống tự lưu trữ (self-hosted) mã nguồn mở dựa trên hệ thống quản lý phiên bản Git được dùng để quản lý mã nguồn dự án. Đây cũng là một nền tảng DevOps hoàn thiện được phân phối dưới dạng một phần mềm đơn lẻ [39]. Với GitLab, các cá nhân, tổ chức hay doanh nghiệp có thể lưu trữ và quản lý kho mã nguồn
một cách nhanh chóng, thuận tiện, khoa học và an toàn. Bên cạnh đó, người dùng có
thể truy cập GitLab nhanh chóng thông qua kết nối Internet dù họ đang ở bất cứ đâu. GitLab cung cấp một ngưỡng giới hạn dung lượng có thể lưu trữ miễn phí cho người dùng và khi vượt quá ngưỡng này thì người dùng phải trả thêm phí dịch vụ nếu muốn tiếp tục sử dụng. Ngoài ra, GitLab cũng có thể được cài đặt trên một máy chủ (server) riêng để tiện cho việc sử dụng và quản lý.
Những ưu điểm khi sử dụng GitLab bao gồm:
* GitLab giúp lập trình viên lưu trữ, tải lên va tải xuống mã nguồn một cách nhanh
chóng và thuận tiện.
* GitLab giúp kiểm soát các thay đổi của mã nguồn một cách nhanh chóng va
chính xác.
* GitLab hỗ trợ việc phân phối và quản lý công việc trong các dự án hiệu quả hơn.