Sự khác biệt giữa checkin và checkout là gì?


14

Khi dạy các lớp SCM cho sinh viên chưa quen với Quản lý cấu hình phần mềm, một câu hỏi xuất hiện như " What's the difference between checkin and checkout?".

Và một biến thể của nó là những sinh viên như vậy bị nhầm lẫn về các khái niệm SCM này (họ hiểu chúng theo cách khác).

Vì vậy, loại ẩn dụ nào bạn có thể sử dụng để giải thích khái niệm SCM quan trọng này cho những đối tượng như vậy?


kiểm tra = khóa; kiểm tra = mở khóa; Bạn có khóa độc quyền để chỉnh sửa đối tượng được đề cập trên nhánh mà bạn thực hiện thao tác.
Jiri Klouda

Câu trả lời:


8

Để giải thích điều gì đó với bất kỳ ai, hãy thử so sánh nó với một cái gì đó mà họ (hy vọng) đã quen thuộc.

Vì vậy, đó là lý do tại sao tôi chỉ trả lời câu hỏi như vậy:

Hãy nghĩ về nó như đến một nơi để ở (một khách sạn, một khu nghỉ mát, vv):

  • rất đầu tiên điều bạn làm (khi bạn đến) là checkin.
  • rất cuối cùng điều bạn làm (khi bạn rời khỏi) là checkout.

Một khái niệm SCM tương tự được áp dụng khi bạn muốn áp dụng các thay đổi cho các thành phần phần mềm ... ngoại trừ việc nó áp dụng theo cách khác :

  • rất đầu tiên điều bạn làm (khi bạn bắt đầu) là checkout(hoặc nghĩ về nó như mượn nó).
  • rất cuối cùng điều bạn làm (khi bạn hoàn thành) là checkin(hoặc nghĩ về nó như đưa nó trở lại).

Lưu ý : điều này áp dụng cho các hệ thống tập trung (chẳng hạn như các hệ thống được sử dụng trong môi trường máy tính lớn ...). Trong các hệ thống như , checkoutkhái niệm "" có một ý nghĩa hoàn toàn khác (mà IMO cũng là lý do tại sao trong các hệ thống đó hầu như không có bất kỳ sự nhầm lẫn nào về cả hai khái niệm này).


Có lẽ mã giống như một cuốn sách thư viện hơn là một phòng khách sạn?
Toby Speight

Đây là một câu trả lời khá ngây thơ, giáo dân. Tôi đã làm việc trong một thập kỷ về các phần bên trong của các hệ thống kiểm soát nguồn vì vậy tôi đã thêm một câu trả lời sâu hơn cho câu hỏi của bạn.
Jiri Klouda

6

Điều quan trọng cần lưu ý là các thuật ngữ "đăng ký" và "thanh toán" có ý nghĩa khác nhau tùy thuộc vào loại hệ thống SCM.

Các hệ thống tập trung như TFVC, Subversion và Clearcase sử dụng kiểm tra "độc quyền". Điều này giống như phép ẩn dụ mượn sách của Pierre, nơi chỉ một người dùng có thể có một tệp được kiểm tra cùng một lúc.

Các hệ thống phân tán như git có lệnh "thanh toán", nhưng nó có nghĩa là một cái gì đó hoàn toàn khác. git checkoutđược sử dụng để chuyển đổi giữa các nhánh khi làm việc với một kho lưu trữ cục bộ.


Điểm tốt Dave về các hệ thống phân tán! Trên thực tế đó cũng là lý do tại sao bản thân tôi lúc đầu (khi tôi mới biết về GIT) đã rất bối rối. Để không làm mất hiệu lực câu trả lời của bạn (bằng cách điều chỉnh câu hỏi của tôi), tôi đã tinh chỉnh câu trả lời của riêng mình để làm rõ nó một chút.
Pierre.Vriens

Tôi nên làm rõ: kiểm tra git được sử dụng để kiểm tra các đối tượng từ kho lưu trữ. Đó có thể là một nhánh, hoặc một tệp duy nhất.
Dave Swersky

4

Đối với các hệ thống tập trung, hãy nghĩ về nó giống như một thư viện kỹ thuật. (có thể là sự kéo dài của trí tưởng tượng về cách thư viện giả định này hoạt động ...)

Nếu bạn là tác giả của một tài liệu, bạn có thể checkoutsao chép thư viện, thay đổi, đưa nó trở lại check it back inthư viện để cả thế giới xem.

Điều này có thể trở thành vấn đề nếu thư viện có bản sao kỹ thuật số và tôi checkoutlà tài liệu, người khác cũng checks outlà tài liệu, cả hai chúng tôi đều thay đổi, sẽ có xung đột (xung đột hợp nhất) có thể khó giải quyết. Khi đó, "sửa chữa" ban đầu cho điều này là checkoutchức năng độc quyền ...


Tất nhiên đối với các dự án lớn, cơ hội của một vấn đề xung đột hợp nhất quan trọng sẽ giảm (mọi người sẽ làm việc trên các phần khác nhau của hệ thống) vì vậy checkout/ checkinkhông cần thiết nhiều như vậy. Và vì các hệ thống phân tán theo thiết kế phần nào yêu cầu chức năng hợp nhất tốt, cùng với nhiều lợi ích khác, khái niệm đó không thực sự tồn tại trong git và các DVCS khác


Đó là một cách khác để xem xét nó. Mặc dù theo kinh nghiệm của tôi, tôi không nghĩ rằng cũng nên thêm những thứ như "xung đột" và "hợp nhất" (nếu họ thậm chí không cảm thấy thoải mái khi thanh toán và đăng ký).
Pierre.Vriens

Công bằng, tôi đã thêm nó bởi vì đó là lý do chính mà thanh toán / checkin tồn tại mà tôi có thể nghĩ ra. Và cảm giác như nắm bắt một khái niệm là cực kỳ khó khăn nếu bạn không biết khái niệm đó thực sự hữu ích cho việc gì.
Thymine

2

Với kho lưu trữ SCM là chủ đề chính thì '

  • thanh toán là nhận được những thay đổi ra từ kho lưu trữ cục bộ hoặc từ xa (vào thư mục làm việc tại địa phương).
  • checkin sẽ đưa các thay đổi trở lại vào kho lưu trữ cục bộ hoặc từ xa (từ thư mục làm việc cục bộ của bạn).

Merci cho câu trả lời này cũng có . Đó thực sự là một cách để giải thích nó, mặc dù tôi vẫn tự hỏi liệu bạn có thể nghĩ ra một loại "ẩn dụ" nào đó (như trong câu hỏi của tôi). Ví dụ, để giải thích điều đó cho ai đó bạn đang dạy, người thậm chí không biết được kho lưu trữ cục bộ hoặc từ xa thực sự là gì.
Pierre.Vriens

Đúng, nếu họ không có manh mối về những gì một kho lưu trữ thì cố gắng dạy checkin và thanh toán sẽ là vô nghĩa. Bây giờ, đối với một phép ẩn dụ về kiểm soát nguồn nói chung, bạn có thể so sánh nó với kế toán tài chính / sổ sách kế toán. Về cơ bản là theo dõi các thay đổi đối với giá trị của tài sản. Bạn ghi lại một trong những thay đổi riêng lẻ hoặc nhóm thay đổi (ví dụ: "Đi từ A đến B" thay vì vé taxi + xe buýt + vé tàu + ...) mặc dù không phải là nhóm quá lớn (ví dụ: "Tất cả chi phí vào Thứ Hai"). Tương tự, một kho lưu trữ theo dõi các thay đổi mã nguồn, các nhóm riêng lẻ hoặc không quá lớn.
hlovdal

1
  • Checkout là một khóa độc quyền về sửa đổi một nhánh của đối tượng trong kho lưu trữ.
  • Checkin là một bản phát hành của khóa độc quyền.

Có hai loại hệ thống kiểm soát nguồn tùy thuộc vào đơn vị phân nhánh nhỏ nhất là gì.

1) Mỗi phân nhánh kho lưu trữ (CVS, SVN, GIT, Perforce, ... vv)

Trong các sản phẩm nơi bạn phân nhánh toàn bộ kho lưu trữ, thanh toán thường sẽ tạo hoặc cho phép sửa đổi đối với nhánh cục bộ (bản sao) của toàn bộ kho lưu trữ. Trong các sản phẩm đó, checkin thường không được sử dụng và trở thành một phần của hoạt động cam kết , đó là một lần kiểm tra chi nhánh từ xa, áp dụng bản vá cục bộ và đăng ký của chi nhánh từ xa trong hoạt động đơn lẻ. Bạn không kiểm tra chi nhánh địa phương vì nó được kiểm tra vĩnh viễn. (Lưu ý: Trong GIT, bạn không cam kết với chi nhánh từ xa, bạn đẩy cam kết cục bộ của mình đến nó. Khác biệt về cú pháp. )

2) Mỗi nhánh đối tượng (ClearCase, AccuRev, Oracle ADE)

Trong các sản phẩm nơi bạn phân nhánh các đối tượng riêng lẻ, như thư mục, tệp, v.v ... Khái niệm thanh toánđăng ký áp dụng cho mỗi đối tượng trên mỗi nhánh. Bạn sẽ khóa đối tượng để sửa đổi nó bằng thanh toán và phát hành nó với checkin . Trong các sản phẩm đó, bạn thường làm việc trên một nhánh riêng nơi các khóa không giữ ai làm việc và tại thời điểm hợp nhất chi nhánh địa phương của bạn thành một nhánh dùng chung, các đối tượng cũng được kiểm tra trên nhánh shard (chính, nhánh chính, nhánh tính năng, v.v. ) xung đột hợp nhất được giải quyết và đối tượng được kiểm tra trên nhánh chia sẻ. Điều này cho phép nhiều người "cam kết" cùng một lúc với chi nhánh được chia sẻ miễn là họ không sửa đổi cùng một đối tượng.


Này Jiri, merci cho câu trả lời của bạn. Đối với 2 loại bạn đã đề cập, tôi sẽ đồng ý. Nhưng trong các công cụ SCM trong thế giới máy tính lớn (kinh nghiệm của tôi bắt nguồn từ đâu), người ta không xem xét "khóa" ... Bạn có thể nghĩ cách thêm loại thứ 3 vào câu trả lời của mình không?
Pierre.Vriens

Bạn có thể cho tôi ví dụ về một sản phẩm không phù hợp với hai loại đó không? Tôi có thể cho bạn biết cái nào trong số 2 nó phù hợp hoặc thêm một phần ba, nếu thực sự có một cái. Thanh toán và đăng ký là các hoạt động trên một chi nhánh đưa ra và giải phóng quyền sửa đổi nó. Vì vậy, phân vùng trên những gì một nhánh sản phẩm (toàn bộ kho lưu trữ hoặc các đối tượng riêng lẻ) là tự nhiên cho câu hỏi này. Tôi không biết nếu có bất cứ điều gì ở giữa, nó sẽ là gì? Sự phân nhánh của các cây con như trong Perforce và Subgit về cơ bản là loại đầu tiên. Khóa chỉ là một tên khác cho 'quyền độc quyền'.
Jiri Klouda

BTW Ẩn dụ thư viện như đã đề cập trước đây thực sự là một điều tốt. Khi bạn kiểm tra một cuốn sách, bạn có quyền độc quyền với nó. Bạn mang nó về nhà và làm với nó như bạn muốn. Đọc nó hoặc thậm chí viết nguệch ngoạc ở lề và không ai khác có thể sửa đổi cuốn sách, trong khi bạn đã kiểm tra nó. Giống như loại bỏ một số trang của nó hoặc làm nổi bật một số dòng. Khi bạn kiểm tra trong cuốn sách, mọi người có thể đọc nó tại thư viện, nơi con mắt thận trọng của thủ thư không cho phép bất kỳ sửa đổi nào (phá hoại) hoặc kiểm tra và mang nó về nhà. Nó không tuần tự hóa những thay đổi cho cuốn sách đó.
Jiri Klouda

Để tiếp tục tương tự, trong một nhánh khác của thư viện, cùng một cuốn sách có thể ở đó với các sửa đổi khác nhau hoặc hoàn toàn không thay đổi hoặc hoàn toàn không thay đổi. Một số người khác có thể kiểm tra nó cùng một lúc (ví dụ: thanh toán là trên mỗi chi nhánh). Bây giờ tác giả gốc làm việc trên phiên bản 2, một nhánh chính để nói. Anh ta có thể đọc các ghi chú từ nhiều chi nhánh, hợp nhất chúng lại với nhau, kiểm tra chi nhánh chính và kiểm tra phiên bản thứ 2. Mỗi chi nhánh của thư viện sẽ làm mới bản sao của họ bằng cách mua phiên bản thứ 2. Họ có thể loại bỏ bản 1 hoặc sao chép các ghi chú hữu ích từ lề sang phiên bản mới.
Jiri Klouda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.