チェックインとチェックアウトの違いは何ですか?


14

Software Configuration Managementを初めて使用する学生にSCMクラスを教えると、「What's the difference between checkin and checkout?」のような質問が出てきます。

そしてそのバリエーションは、そのような学生がこれらのSCMの概念について混乱することです(彼らはそれらを他の方法として理解しています)。

では、この重要なSCMの概念をそのような聴衆に説明するために、どのようなメタファーを使用できますか?


チェックアウト=ロック; checkin = unlock; 操作を実行するブランチで問題のオブジェクトを編集するには、排他ロックを取得します。
ジリクルダ

回答:


8

誰かに何かを説明するために、彼らが(できれば)すでによく知っているものと比較してみてください。

だから私はそのような質問に答えるだけです:

滞在する場所(ホテル、リゾートなど)に到着したと考えてください。

  • 非常に最初の(あなたが到着したときに)あなたが事はしていますcheckin
  • 非常に最後の(あなたが去るとき)あなたが事はしていますcheckout

あなたがいることを除いて...ソフトウェアコンポーネントに変更を適用したい場合にも、同様のSCMの概念が適用され、それが他の方法で回避を適用します

  • 非常に最初の(あなたが起動したときに)あなたが事はしているcheckout(またはそれを借りるようにそれを考えます)。
  • 非常に最後の(終了したら)あなたが事はしているcheckin(または戻ってそれを与えるようにそれを考えます)。

:これは、集中システム(メインフレーム環境で使用されるシステムなど)に適用されます。以下のようなシステムではcheckout」(これらのシステムではほとんどの両方の概念について混乱がない理由IMOもある)という概念は全く異なる意味を持ちます。


おそらく、コードはホテルの部屋というよりも図書館の本のようなものでしょうか?
トビースパイト

これはかなり素朴な、素人の答えです。私は10年にわたってソース管理システムの内部で働いてきたので、あなたの質問にもう少し詳しく答えを追加しました。
ジリクルダ

6

「チェックイン」と「チェックアウト」という用語は、SCMシステムのタイプに応じて異なる意味を持つことに注意することが重要です。

TFVC、Subversion、Clearcaseなどの集中型システムは、「排他的な」チェックアウトを使用します。これは、一度に1つのユーザーだけがファイルをチェックアウトできる、Pierreの本借用メタファーのようなものです。

gitのような分散システムには「チェックアウト」コマンドがありますが、これは完全に異なるものを意味します。git checkoutローカルリポジトリを操作するときにブランチを切り替えるために使用されます。


分散システムについての良い点デイブ!実際、それが、最初に(GITについて最初に学んだとき)私自身がひどく混乱した理由でもあります。(私の質問を修正することによって)あなたの答えを無効にしないために、私はそれを少し明確にするために私自身の答えを改良しました。
Pierre.Vriens

明確にする必要があります:git checkoutは、リポジトリからオブジェクトをチェックアウトするために使用されます。それはブランチまたは単一のファイルです。
デイブ

4

集中型システムの場合、テクニカルライブラリのようなものだと考えてください。(この仮想ライブラリがどのように機能するか想像力のストレッチかもしれません...)

あなたがドキュメントの作成者である場合checkout、ライブラリをコピーし、変更を加え、check it back in世界中の人に見てもらうためにライブラリに戻すことができます。

これは、ライブラリにデジタルコピーがありcheckout、ドキュメントであり、他の誰かがchecks outドキュメントでもある場合、問題が発生する可能性があります。そのとき、このための最初の「修正」は排他的なcheckout機能です...


もちろん、大規模なプロジェクトのための重要なマージ競合の問題の可能性はそう(人々がシステムの異なる部分の作業をおこなう予定)が低減されるcheckout/ checkin限りほとんど必要ありません。また、設計上の分散システムには、他の多くの利点とともに、優れたマージ機能が多少必要であるため、その概念は実際にはgitやその他のDVCSには存在しません


それは別の見方です。私の経験では、「コンフリクト」や「マージ」のようなものも追加することは良い考えではないと思います(チェックアウトとチェックインにまだ慣れていない場合)。
Pierre.Vriens

公平です。チェックアウト/チェックインが存在する主な理由は考えられるからです。そして、その概念が実際に何に役立つかわからない場合、概念を把握することは非常に難しいように感じます。
チミン

2

次に、SCMリポジトリを主な主題として」

  • チェックアウトは、変更を取得しているアウト(ローカルの作業ディレクトリに)ローカルまたはリモートリポジトリから。
  • checkinは、変更をローカルまたはリモートリポジトリ(ローカル作業ディレクトリから)に戻しいます。

この答えメルシー。それは確かにそれを説明する方法ですが、あなたが何らかの「メタファー」(私の質問のように)を考えることができるかどうかはまだ疑問です。例えば、あなたが教えているだろう誰かにそれを説明するために、ローカルまたはリモートのリポジトリが本当に何であるかについての手掛かりさえ持っていません。
Pierre.Vriens

確かに、彼らがリポジトリが何をしているのか見当がつかない場合、チェックインとチェックアウトを教えようとしても意味がありません。さて、一般的なソース管理のメタファーについては、財務会計/簿記と比較できます。基本的に、資産の価値の変化を追跡しています。単一の個別の変更または変更のグループ(例:タクシーチケット+バスティッカー+列車チケット+ ...ではなく、「AからBへの旅行」)を記録します。同様に、リポジトリは、個々のグループまたは大きすぎないグループのソースコードの変更を追跡します。
hlovdal

1
  • チェックアウトは、リポジトリ内のオブジェクトのブランチの変更に対する排他的ロックです。
  • チェックインは排他ロックのリリースです。

分岐の最小単位に応じて、2種類のソース管理システムがあります。

1)リポジトリごとの分岐(CVS、SVN、GIT、Perforceなど)

リポジトリ全体をブランチする製品では、通常、チェックアウトはリポジトリ全体のローカルブランチ(コピー)への変更を作成するか、有効にします。これらの製品では、チェックインは多くの場合使用されず、コミット操作の一部になります。これは、リモートブランチのチェックアウト、ローカルパッチの適用、およびリモートブランチのチェックインを一度の操作で行います。ローカルブランチは恒久的にチェックアウトされているため、チェックインしません。(注:GITでは、リモートブランチにコミットするのではなく、ローカルコミットをプッシュします。厳密には構文上の違いがあります。

2)オブジェクトごとの分岐(ClearCase、AccuRev、Oracle ADE)

ディレクトリ、ファイルなどの個々のオブジェクトを分岐する製品。チェックアウトチェックインの概念は、分岐ごとのオブジェクトごとに適用されます。あなたはでそれを修正するために、オブジェクトをロックしますチェックアウトし、それを解放しチェックイン。これらの製品では、多くの場合、ロックによって誰も作業を妨げられないプライベートブランチで作業し、ローカルブランチを共有ブランチにマージするときに、オブジェクトはシャードブランチ(メイン、マスター、機能ブランチなど)でもチェックアウトされます)マージの競合が解決され、オブジェクトが共有ブランチでチェックインされます。これにより、同じオブジェクトを変更しない限り、複数の人が共有ブランチに同時に「コミット」できます。


ねえジリ、あなたの答えを慈悲。あなたが言及したこれらの2種類については、私は同意します。しかし、メインフレームの世界のSCMツール(私の経験から生まれたもの)では、「ロック」を考慮に入れていません... 3番目の種類を答えに追加する方法を考えられますか?
Pierre.Vriens

これらの2つのカテゴリに当てはまらない製品の例を教えてください。2つのうちどれに適合するかを言うか、実際にある場合は3つ目を追加します。チェックアウトとチェックインは、ブランチを変更する権利を付与および解放する操作です。そのため、この質問では、製品が分岐するもの(リポジトリ全体または個々のオブジェクト)でパーティション分割するのが自然です。間に何かあるかどうかわかりませんが、それは何でしょうか?PerforceおよびSubgitのようなサブツリーの分岐は、本質的に最初のカテゴリです。ロックは、「排他的権利」の単なる別の名前です。
ジリクルダ

ところで、前述のライブラリの比phorは本当に良いものです。本をチェックアウトすると、その本に対する独占的な権利が得られます。あなたはそれを家に持ち帰り、好きなようにそれでやります。それを読んだり、余白のメモを走り書きしたりすると、チェックアウトしている間は誰も本を変更できません。そのページのいくつかを削除したり、いくつかの行をハイライトしたりするように。この本をチェックインすると、人々は図書館でそれを読むことができます。図書館では、図書館員の注意深い目で修正(破壊行為)が許可されていないか、チェックアウトして持ち帰ることができます。その本への変更をシリアル化します。
ジリクルダ

類推を続けるために、図書館の別のブランチでは、同じ本が異なる修正を加えられているか、まったく変更されていないか、まったくないかもしれません。他の誰かが同時にそこをチェックアウトできます(つまり、チェックアウトはブランチごとです)。原作者は、いわばマスターブランチである第2版に取り組んでいます。彼は、複数のブランチからノートを読み、それらをマージし、マスターブランチをチェックアウトし、第2版をチェックインすることができました。ライブラリの各ブランチは、第2版を購入してコピーを更新します。1枚目を破棄するか、まだ有用なメモを余白から新しいエディションにコピーできます。
ジリクルダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.