"Chào, Amigo!"

"CHÀO!"

"Hôm nay tôi sẽ nói với bạn về các hệ thống kiểm soát phiên bản."

"Như bạn có thể đã biết, các chương trình thường rất lớn và mất nhiều thời gian để viết. Đôi khi hàng chục người có thể dành nhiều năm để viết một chương trình."

"Các dự án với hàng triệu dòng mã là một thực tế."

"Ái chà."

"Tất cả đều rất phức tạp. Mọi người thường can thiệp lẫn nhau, và thường sửa đổi cùng một mã, vân vân và vân vân."

"Để mang lại trật tự cho mớ hỗn độn này, các lập trình viên bắt đầu sử dụng các hệ thống kiểm soát phiên bản cho mã của họ."

" Hệ thống kiểm soát phiên bản là một chương trình bao gồm máy khách và máy chủ.

"Chương trình lưu trữ dữ liệu (mã do lập trình viên viết) trên máy chủ và các lập trình viên thêm hoặc thay đổi dữ liệu đó bằng ứng dụng khách."

"Sự khác biệt chính giữa hệ thống kiểm soát phiên bản và các chương trình chỉ đơn giản là có thể làm việc cộng tác trên các tài liệu là nó lưu trữ tất cả các phiên bản trước của tất cả các tài liệu (tệp mã)."

"Bạn có thể cho tôi biết thêm chi tiết. Tất cả hoạt động như thế nào?"

"Hãy tưởng tượng rằng bạn là một lập trình viên và bạn muốn thực hiện những thay đổi nhỏ đối với mã nguồn của chương trình được lưu trữ trong kho lưu trữ trên máy chủ."

"Đây là những gì bạn cần làm:"

"1) Đăng nhập vào máy chủ."

"2) Sao chép phiên bản mới nhất của tất cả các tệp vào máy tính của bạn bằng lệnh Checkout."

"3) Thực hiện các thay đổi đối với các tệp được yêu cầu."

"4) Chạy chương trình cục bộ để đảm bảo rằng chương trình biên dịch và chạy."

"5) Gửi 'các thay đổi' của bạn tới máy chủ bằng lệnh Cam kết."

"Điều đó thường có ý nghĩa."

"Nhưng còn hơn thế nữa. Hãy tưởng tượng rằng bạn đến nơi làm việc vào buổi sáng, nhưng ở Ấn Độ đã là giờ ăn trưa. Vì vậy, các đồng nghiệp Ấn Độ của bạn đã thực hiện các thay đổi và cam kết các thay đổi của họ đối với kho lưu trữ của bạn trên máy chủ."

"Bạn cần làm việc với phiên bản mã mới nhất. Vì vậy, bạn thực hiện lệnh Cập nhật ."

"Điều đó khác với Checkout như thế nào ?"

" Checkout được thiết kế để sao chép tất cả các tệp của kho lưu trữ, nhưng Update chỉ cập nhật các tệp đã được cập nhật trên máy chủ kể từ lần cuối bạn chạy lệnh Checkout / Update ."

"Đây là cách nó hoạt động:"

thanh toán :

Hệ thống kiểm soát phiên bản - 1

"Bây giờ, giả sử chúng ta đã thay đổi tệp B và muốn tải nó lên máy chủ. Để làm điều này, chúng ta cần sử dụng lệnh Cam kết ."

Hệ thống kiểm soát phiên bản - 2

"Và đây là cách hoạt động của lệnh Cập nhật :"

Hệ thống kiểm soát phiên bản - 3

"Thật thú vị! Có mệnh lệnh nào khác không?"

"Vâng, có khá nhiều. Nhưng chúng khác nhau tùy thuộc vào chương trình kiểm soát phiên bản mà bạn chọn. Vì vậy, tôi đang cố gắng giải thích các nguyên tắc chung."

"Ngoài ra còn có một hoạt động được gọi là hợp nhất—sự hợp nhất của hai tài liệu. Giả sử hai lập trình viên được sửa đổi cùng một tệp cùng một lúc. Sau đó, chương trình trên máy chủ sẽ không cho phép cả hai thay đổi được thực hiện. Ai thực hiện trước sẽ được thêm phần của mình hoặc những thay đổi của cô ấy."

"Vậy người kia làm sao?"

"Người đó sẽ được mời thực hiện thao tác Cập nhật để lấy những thay đổi mới nhất từ ​​máy chủ. Nhân tiện, việc này — thực hiện Cập nhật trước khi thực hiện — là một cách làm tốt."

"Sau đó, trong quá trình hoạt động Cập nhật, chương trình máy khách sẽ cố gắng hợp nhất các thay đổi cục bộ với các thay đổi nhận được từ máy chủ."

"Nếu các lập trình viên thay đổi các phần khác nhau của tệp, thì chương trình kiểm soát phiên bản có thể hợp nhất chúng thành công.  Nếu các thay đổi ở cùng một vị trí, thì chương trình kiểm soát phiên bản sẽ báo cáo xung đột hợp nhất và nhắc người dùng thực hiện thủ công hợp nhất các thay đổi."

"Ví dụ, điều này thường xảy ra khi cả hai lập trình viên thêm thứ gì đó vào cuối tệp."

"Tôi hiểu. Nhìn chung, điều đó có vẻ hợp lý."

"Và còn một thứ nữa: cành cây."

"Hãy tưởng tượng rằng hai lập trình viên trong một nhóm được giao nhiệm vụ viết lại cùng một mô-đun. Hoặc thậm chí tốt hơn — viết lại từ đầu. Cho đến khi mô-đun này hoàn thành, chương trình sẽ không thể chạy và thậm chí có thể không biên dịch được."

"Vậy họ phải làm gì?"

"Họ tiến về phía trước bằng cách thêm các nhánh vào kho lưu trữ. Nói một cách đại khái, điều này có nghĩa là kho lưu trữ được chia thành hai phần. Không phải theo tệp hoặc thư mục, mà theo phiên bản."

"Hãy tưởng tượng điện không bao giờ được phát hiện và robot không bao giờ được phát minh. Khi đó ba cuộc chiến tranh giải phóng sẽ không bao giờ xảy ra, và toàn bộ lịch sử loài người sẽ đi theo một con đường hoàn toàn khác. "

"Con đường này là một nhánh thay thế của lịch sử."

"Hoặc bạn có thể thử hình dung một nhánh chỉ đơn giản là một bản sao của kho lưu trữ. Nói cách khác, tại một số điểm, chúng tôi đã tạo một bản sao của kho lưu trữ trên máy chủ, để ngoài kho lưu trữ chính (thường được gọi là thân cây ), chúng tôi có một chi nhánh khác ."

"Chà, điều đó có vẻ dễ hiểu hơn.

"Tại sao bạn không thể nói rằng chúng tôi đã sao chép kho lưu trữ?"

"Đây không phải là sao chép đơn giản."

"Những nhánh này không chỉ có thể tách ra khỏi thân cây, mà còn có thể sáp nhập vào nó."

"Nói cách khác, một số công việc có thể được thực hiện trong một nhánh, và sau đó khi hoàn thành, bạn có thể thêm nhánh kho lưu trữ vào thân kho lưu trữ?"

"Chuẩn rồi."

"Và điều gì sẽ xảy ra với các tập tin?"

"Các tập tin sẽ được hợp nhất."

"Chà, điều đó nghe thật tuyệt. Tôi hy vọng nó cũng tuyệt như vậy khi hành động."

"Và sau đó là một số. Được rồi, chúng ta hãy nghỉ ngơi."

"Có rất nhiều thông tin hữu ích  ở đây "