"Hôm nay tôi sẽ nói với bạn về hai chương trình kiểm soát phiên bản phổ biến nhất: SVN và Git."

"SVN hoạt động gần giống như cách tôi đã mô tả trong bài học trước. Git phức tạp hơn một chút và tôi dự định sẽ thảo luận chi tiết hơn về nó."

"Bạn có thể cho tôi liên kết đến tài liệu về SVN và Git không?"

"Tất nhiên, chỉ một giây thôi."

http://svnbook.red-bean.com/vi/1.7/svn-book.html

https://githowto.com  (đây đơn giản là một kiệt tác)

"Vậy, Git ."

"Nó phức tạp hơn SVN một chút.  Với Git, mỗi người dùng có kho lưu trữ cục bộ của riêng mình bên cạnh kho lưu trữ máy chủ. "

"Vậy ngươi cam kết ở nơi nào?"

"Người dùng luôn cam kết với kho lưu trữ cục bộ của họ."

"Nhưng còn kho lưu trữ máy chủ thì sao?"

"Để đồng bộ hóa kho lưu trữ cục bộ và máy chủ, có các lệnh Kéo và Đẩy đặc biệt .

"Có một lý do cho điều này. Đôi khi một lập trình viên cần phải tự mình thực hiện rất nhiều công việc, có thể liên quan đến hàng trăm lần xác nhận trước khi có thể thêm nó vào kho lưu trữ dùng chung."

"Để làm điều này trong SVN, bạn sẽ phải bắt đầu một nhánh riêng biệt, sau đó hợp nhất nó với thân cây."

"Với Git, bạn chỉ cần luôn cam kết với kho lưu trữ cục bộ, sau đó gửi tất cả các thay đổi theo lô đến kho lưu trữ trung tâm trên máy chủ khi bạn hoàn tất."

"Phương pháp này có vẻ hơi thừa khi bạn chỉ viết một đoạn mã nhỏ. Nhưng khi nhiệm vụ của bạn quá lớn đến mức chúng kéo dài hàng tuần, thì bạn hiểu rằng bạn không thể chỉ viết toàn bộ thời gian mà không cam kết."

"Tại sao bạn không thể chỉ làm việc trong hai tuần và sau đó gửi các thay đổi của mình cho máy chủ một lần?"

"Chà, một chương trình kiểm soát phiên bản mang lại rất nhiều tiện ích."

"Hãy tưởng tượng rằng bạn cam kết mỗi ngày và vào ngày thứ 10, bạn phát hiện ra rằng những thay đổi bạn đã thực hiện trong hai ngày qua không hoạt động như kế hoạch. Và bạn muốn trở lại mã bạn có vào ngày thứ 8 và tiếp cận nhiệm vụ khác nhau."

"Bạn chỉ cần khôi phục các thay đổi được thực hiện đối với kho lưu trữ cục bộ trong hai ngày qua và quay lại trạng thái mong muốn. Đây được gọi là thao tác khôi phục ."

"Anh đang nói với tôi là anh có thể làm được sao?"

"Đúng. Ngoài ra, do lịch sử cam kết được lưu trữ nên bạn có thể tìm hiểu khi nào và tại sao điều gì đó được cam kết, và bởi ai, các tính năng/lỗi có liên quan và mười tệp nào đã được sửa đổi đồng thời như một phần của công việc này."

"Giả sử bản sửa lỗi của ai đó làm hỏng mã của người khác. Bạn chỉ cần khôi phục ( rollback ) mã và tiếp tục như thể thay đổi chưa từng xảy ra."

"OK, thật tuyệt. Tôi tin chắc. Bạn có thể chỉ cho tôi một vài ví dụ minh họa cách thức hoạt động của tất cả những thứ này không?"

"Chắc chắn."

"Đây là cách bạn sao chép kho lưu trữ trung tâm vào máy tính cục bộ của mình:"

Cam kết và chi nhánh - 1

"Vì vậy, thao tác Thanh toán không còn cần thiết nữa."

"Yep. Và đây là ví dụ về thao tác Đẩy :"

Cam kết và chi nhánh - 2

"Và Hoạt động kéo :

Cam kết và chi nhánh - 3

"À. Điều đó ít nhiều cũng có lý."

"Nhân tiện, có một dịch vụ thú vị tên là GitHub."

"Bất kỳ lập trình viên nào cũng có thể đăng ký ở đó và tạo kho lưu trữ Git của riêng họ. Tôi khuyên bạn nên làm quen với nó nhiều hơn."

"Dưới đây là một vài liên kết hữu ích:"

https://githowto.com

https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

https://articles.assembla.com/using-git/getting-started/set-up-git-on-windows-with-tortoisegit

"Lưu ý rằng có khá nhiều ứng dụng khách Git."

"Đầu tiên, có   GitBash , cho phép bạn nhập các lệnh văn bản."

"Sau đó, có TortoiseGit , đây là một chương trình tốt được tích hợp trong Windows Explorer. Nó cho phép bạn làm việc với các tệp trong kho lưu trữ Git trực tiếp trong Explorer."

"IntelliJ IDEA hỗ trợ Git và cho phép bạn thực thi tất cả các loại lệnh phức tạp chỉ với một vài cú nhấp chuột trực tiếp từ bên trong môi trường."

"Vậy, tôi nên học cái nào?"

"Tôi khuyên bạn nên làm quen với tất cả chúng."

"Bạn sẽ vượt qua cuộc phỏng vấn của mình và đến nơi làm việc. Bạn sẽ nhận được một liên kết đến Git, thông tin đăng nhập và mật khẩu — và thế là xong. Sau đó, bạn tự túc."

"Ý bạn là gì, «một mình»?"

"Ý tôi là bạn sẽ tự thiết lập Git, tự lấy một bản sao của kho lưu trữ,..."

"Và sau đó bạn sẽ cần phải xây dựng và cố gắng chạy dự án."

"Hướng dẫn xây dựng rất có thể sẽ có trong kho Git, cùng với tài liệu dự án."

"Trưởng nhóm của bạn sẽ đến gặp bạn vào buổi tối và nói,  «Chà, bạn đã tìm ra điều gì cho đến nay?» "

"Và bạn sẽ nói, 'Tôi đang cố gắng thiết lập Git ở đây, nhưng vẫn chưa thành công. «Bạn sẽ không sa thải tôi, phải không?" "

"Hoặc, trong khi vẫn còn giữa trưa, bạn có thể đến gặp trưởng nhóm và nói,  «Tôi đã cài đặt Git, lấy dự án và duyệt qua tài liệu, nhưng có hàng trăm tệp và tôi chưa sắp xếp mọi thứ. Ở đâu hướng dẫn xây dựng hiện tại là gì?'» "

"Bạn có thể cảm thấy sự khác biệt?"

"Vâng. Trong trường hợp thứ hai, tôi là một lập trình viên siêu sao, nhưng trong trường hợp đầu tiên, tôi là một gã người máy ngốc nghếch thậm chí còn không biết cách lấy một dự án từ Git. Nói cách khác, tôi đã làm hỏng việc lên trước cả khi tôi bắt đầu lập trình. Tôi cho rằng sau đó họ thậm chí còn không cho tôi viết mã."

"Thấy chưa, bạn đã trả lời câu hỏi của chính mình. Vì vậy, hãy nghiên cứu và tìm ra câu trả lời. Không ai sẽ làm điều đó cho bạn."

"Ngươi không định giúp ta?"

"Tôi đã giúp rồi. Chúng tôi đang dạy Java ở đây, phòng trường hợp bạn quên mất. Còn mọi thứ khác, bạn tự lo liệu. Hay đầu bạn chỉ để uống?"

"Được rồi, tôi hiểu rồi. Cảm ơn, Bilaabo!"