SOFTWARE VERSION CONTROL
19-11-2020
Thuật ngữ kiểm soát phiên bản được sử dụng để mô tả quá trình lưu các bản sao khác nhau của một tệp hoặc tập hợp các tệp để theo dõi các thay đổi được thực hiện cho các tệp đó.
Mô tả này nhấn mạnh mức độ hữu ích của nó đối với thế giới lập trình. Kiểm soát phiên bản phần mềm (SVC) thường liên quan đến cơ sở dữ liệu lưu trữ hiện tại và lịch sử phiên bản mã nguồn để cho phép nhiều người hoặc nhiều nhóm để làm việc trên nó cùng một lúc. Nếu chưng trình xảy ra lỗi và bạn muốn quay lại bản sửa đổi (hoặc bất kỳ phiên bản nào trước đó), SVC là câu trả lời. Bạn cũng có thể nghe qua những tên gọi khác như kiểm soát sửa đổi hoặc quản lý mã nguồn,… nhưng tất cả đều thuộc chủ đề quản lý cấu hình phần mềm. Một khi bạn đã sử dụng SVC, bạn sẽ nhanh chóng trở thành một người tin tưởng khả năng của nó và sẽ không muốn quay lại sử dụng thủ công quy trình lại lần nào nữa.
Nếu bạn đang có một nhóm các developers làm việc trong một dự án, tất cả bọn họ đều viết những đoạn mã mới hoặc thay đổi đến các đoạn mã đã viết trước đó, một khi một người làm mất một vài tệp nào đó có thể khiến bạn mất hàng tuần hoặc hàng tháng. Kiểm soát phiên bản có thể bảo vệ mã nguồn của bạn bằng cách cho phép những thay đổi được theo dõi bên trong một cấu trúc cây phân cấp với các thư mục và các tệp trong đó, thông qua một quy trình được gọi là commit code (cam kết mã). Bạn thường không biết những gì một developer cần thay đổi hoặc đã thay đổi, nhưng hệ thống kiểm soát phiên bản thì lại biết điều đó. Mỗi một commit đều được gắn thẻ với người đã thực hiện thay đổi và những gì người đó đã thay đổi trong mã.
Thay vì sử dụng các kỹ thuật kém hiệu quả chẳng hạn như khóa tệp, hệ thống kiểm soát phiên bản xử lý đăng ký đồng thời, cho phép hai lập trình viên cùng commit code cùng một lúc. Một khía cạnh khác của hệ thống kiểm soát phiên bản là khả năng phân nhánh (branch) và hợp nhất (merge) những mã nguồn được tạo ra độc lập với nhau. Các chức năng này rất hữu ích nếu bạn đang viết mã trên một phần của ứng dụng có thể xung đột với một phần khác được viết bởi nhóm khác. Bằng cách tạo một nhánh mới, bạn có thể tạo một luồng làm việc riêng, có lịch sử commit code riêng của nó mà không làm ảnh hưởng đến toàn bộ phần mã nguồn chính.
Sau khi mã được viết và mọi xung đột được giải quyết, mã từ một nhánh có thể được hợp nhất trở lại thân cây chính. Nhiều nhà phát triển ứng dụng sử dụng kỹ thuật này cho các tính năng mới hoặc các bản sửa đổi mới của ứng dụng.
Bạn có thể phát triển một phần mềm mà không cần hệ thống kiểm soát phiên bản hay không? Đương nhiên là có, nhưng tại sao lại làm vậy? Hiện có rất phần mềm kiểm soát phiên bản, đa số lại miễn phí, và dùng hệ thống quản lí phiên bản để lưu trữ mã của bạn là một điều rất tốt. Git là một trong những công cụ được sử dụng phổ biến nhất hệ thống kiểm soát phiên bản ngày nay và bài thi DevNet 200-901 DEVASC sẽ kiểm tra kiến thức của bạn về nó, vì vậy phần tiếp theo sẽ trình bày cách sử dụng Git.
Phần 7 8 9 10 11
Git
Nếu bạn đang làm việc với phần mềm quản lí phiên bản, rất có thể đó là git. Một số lượng đáng kinh ngạc các công ty sử dụng git vì nó miễn phí và mã nguồn mở. Năm 2005, Linus Torvalds (cha đẻ của Linux) đã tạo ra git như một giải pháp thay thế cho Bitkeeper của hệ thống scm, khi chủ sở hữu ban đầu của Bitkeeper quyết định ngừng cho phép sử dụng miễn phí hệ thống để phát triển Linux. Không có biện pháp mã nguồn mở nào sẵn có có thể đáp ứng được nhu cầu của anh ta, Torvalds đã tạo ra một hệ thống kiểm soát phiên bản phân tán và đặt tên là git. Git được tạo ra để có thể mở rộng, với quy trình làm việc được phân bổ có thể hỗ trợ số lượng lớn những người đóng góp cho Linux. Phát minh của ông đã được chuyển giao cho Junio Hamano vào năm 2006 và nó đã trở thành hệ thống quản lý source code được sử dụng rộng rãi nhất trên thế giới.
Ghi chú
Github không phải là git. Github là một nền tảng mạng xã hội dựa trên đám mây dành cho các lập trình viên, cho phép mọi người chia sẻ và đóng góp vào các dự án phần mềm (nguồn mở hoặc riêng tư). Mặc dù github sử dụng git làm hệ thống kiểm soát phiên bản của nó bên dưới giao diện đồ họa, nhưng nó không bị ràng buộc trực tiếp với dự án mã nguồn mở git (giống như một bản phân phối linux, chẳng hạn như ubuntu hoặc fedora, sử dụng nhân linux nhưng được phát triển độc lập từ nó)
Tìm hiểu git
Git là một hệ thống kiểm soát version phân tán được xây dựng với khả năng mở rộng. Nó sử dụng cấu trúc đa cây, và nếu bạn quan sát kỹ thiết kế của git, ta dễ dàng thấy được nó trông rất giống với một file system (dù sao thì Linus Torvalds cũng là người đã tạo ra hệ điều hành Linux). Git theo dõi ba cấu trúc chính (hình 2.8):
Local workspace: đây là nơi bạn lưu trữ các tệp mã nguồn, tệp nhị phân, hình ảnh, tài liệu và bất kỳ thứ gì khác mà bạn cần
Staging area: còn gọi là Index, đây là khu vực lưu trữ trung gian cho các mục được cần đồng bộ hóa (những mục thay đổi và mục mới).
Head, or local repository: đây là nơi bạn lưu trữ tất cả những mục đã được commit
Hình 2.8
Một khái niệm rất quan trọng khác với git là vòng đời của tệp. Mỗi tệp mà bạn thêm vào thư mục làm việc của mình có một trạng thái được gán cho nó. Trạng thái này xác định cách git xử lý tệp. Hình 2-9 cho thấy vòng đời trạng thái tệp git, bao gồm các trạng thái sau:
Untracked: khi bạn tạo một tập tin lần đầu tiên trong một thư mục mà git đang quản lý, tệp được gán với trạng thái untracked (không được theo dõi). Git nhìn thấy tập tin này nhưng không thực hiện bất kỳ loại hoạt động kiểm soát phiên bản nào trên đó. Bằng một cách có chủ ý, các tập tin này được xem như vô hình với phần còn lại của thế giới. Một số tệp, chẳng hạn như các tệp chứa thiết đặt hoặc mật khẩu hoặc tệp tạm thời, có thể được lưu trữ trong thư mục làm việc, nhưng bạn sẽ không muốn bỏ nó vào hệ thống quản lý phiên bản. Nếu bạn muốn git bắt đầu theo dõi một tập tin, bạn phải nói rõ ràng với nó. Để làm như vậy ta dùng lệnh lệnh git add; khi bạn làm điều này, trạng thái của tập tin sẽ đổi thành tracked.
Unmodified: những tệp được theo dõi trong git được xem như một phần của kho lưu trữ và các thay đổi sẽ được theo dõi. Trạng thái này có nghĩa là git đang theo dõi bất kỳ thay đổi tệp nào được thực hiện, nhưng nó chưa thấy bất kỳ thay đổi nào
Modified: bất cứ khi nào bạn thêm vài đoạn mã hoặc thực hiện vài thay đổi đối với tệp, git sẽ thay đổi trạng thái của tệp thành Modified (đã sửa đổi). Trạng thái sửa đổi là nơi git thấy rằng bạn đang làm việc trên tệp nhưng bạn chưa hoàn tất. Bạn phải nói với git rằng bạn đã sẵn sàng để thêm một tập tin đã thay đổi vào staging area bằng cách chạy câu lệnh git add một lần nữa.
Staged: khi một tập tin đã thay đổi được thêm vào index, git cần có khả năng kết hợp các thay đổi của bạn và cập nhật kho lưu trữ cục bộ. Quá trình này được gọi là staging và được thực hiện thông qua git commit. Tại thời điểm này, trạng thái tệp của bạn được chuyển trở lại trạng thái được theo dõi và nó vẫn ở đó cho đến khi bạn thực hiện thay đổi đối với tệp trong tương lai và khởi động lại toàn bộ quá trình này một lần nữa. Hình 2.9: vòng đời trạng thái tệp git
Nếu tại bất kỳ thời điểm nào bạn muốn xem trạng thái của một file từ kho lưu trữ của git, bạn có thể sử dụng lệnh git status, đây là câu lệnh cực kỳ hữu ích để xem trạng thái của mỗi file trong thư mục làm việc.
Bạn có thể kéo các file hoặc lấy cả một dự án đã tồn tại về máy mình bằng cách tạo một clone (bản sao). Khi việc clone một repository (kho) hoàn tất, thư mục làm việc của bạn sẽ khớp chính xác với những gì được lưu trữ trong kho. Khi bạn thực hiện các thay đổi đối với bất kỳ mã nguồn hoặc tệp nào, bạn có thể thêm các thay đổi của mình vào index, nơi chúng sẽ ở trạng thái staging, chờ bạn hoàn thành tất cả các thay đổi hoặc bổ sung của mình. Bước tiếp theo là thực hiện commit và đóng gói các thay đổi để gửi (hoặc đẩy) vào kho lưu trữ từ xa (remote repository, thường là một server hoặc một máy tính khác ở đâu đó trên internet). Quy trình cấp cao này sử dụng nhiều lệnh được trình bày trong phần tiếp theo. Nếu bạn hiểu cấu trúc cây của git, việc tìm ra lệnh bạn cần rất đơn giản.
Hình 2-10 cho thấy quy trình làm việc git cơ bản.