Was ist der Unterschied zwischen Ein- und Auschecken?


14

Beim Unterrichten von SCM-Klassen an Schüler, die noch nicht mit Software Configuration Management vertraut sind, taucht möglicherweise die Frage " What's the difference between checkin and checkout?" auf.

Und eine Variation davon ist, dass solche Studenten über diese SCM-Konzepte verwirrt werden (sie verstehen sie als umgekehrt).

Welche Art von Metapher können Sie also verwenden, um einem solchen Publikum dieses entscheidende SCM-Konzept zu erklären?


Kasse = Sperre; checkin = entsperren; Sie haben die exklusive Sperre, um das betreffende Objekt in dem Zweig zu bearbeiten, in dem Sie die Operation ausführen.
Jiri Klouda

Antworten:


8

Um jemandem etwas zu erklären, versuchen Sie, es mit etwas zu vergleichen, mit dem er (hoffentlich) bereits vertraut ist.

Deshalb beantworte ich solche Fragen einfach so:

Stellen Sie sich vor, Sie kommen an einer Unterkunft an (einem Hotel, einem Resort usw.):

  • die sehr erste , was Sie tun (wenn Sie ankommen) ist checkin.
  • die sehr letzte , was Sie tun (wenn Sie verlassen) ist checkout.

Ein ähnliches SCM-Konzept gilt, wenn Sie Änderungen an Softwarekomponenten vornehmen möchten ... mit der Ausnahme, dass es umgekehrt gilt :

  • die sehr erste , was Sie tun (wenn Sie beginnen) ist checkout(oder denken Sie daran es wie Kreditaufnahme).
  • die sehr letzte , was Sie tun (wenn Sie fertig sind ) ist checkin(oder denken Sie daran , wie es zurück zu geben).

Hinweis : Dies gilt für zentralisierte Systeme (wie sie in Mainframe-Umgebungen verwendet werden ...). In Systemen wie " " das checkoutKonzept eine völlig andere Bedeutung (was IMO auch ist, warum in diesen Systemen kaum Verwirrung über beide Konzepte herrscht).


Vielleicht ähnelt der Code eher einem Bibliotheksbuch als einem Hotelzimmer?
Toby Speight

Dies ist eine eher naive, laienhafte Antwort. Ich habe ein Jahrzehnt lang an internen Versionsverwaltungssystemen gearbeitet, daher habe ich Ihre Frage etwas ausführlicher beantwortet.
Jiri Klouda

6

Es ist wichtig zu beachten, dass die Begriffe "Einchecken" und "Auschecken" je nach Typ des SCM-Systems unterschiedliche Bedeutungen haben.

Zentralisierte Systeme wie TFVC, Subversion und Clearcase verwenden "exklusive" Kassen. Dies ist wie bei Pierres Metapher für das Ausleihen von Büchern, bei der nur ein Benutzer eine Datei gleichzeitig auschecken kann.

Verteilte Systeme wie git haben einen "checkout" -Befehl, der jedoch etwas völlig anderes bedeutet. git checkoutwird verwendet, um bei der Arbeit mit einem lokalen Repository zwischen Zweigen zu wechseln.


Guter Punkt Dave über die verteilten Systeme! Das ist auch der Grund, warum ich zuerst (als ich zum ersten Mal von GIT erfuhr) furchtbar verwirrt war. Um Ihre Antwort nicht zu ungültig zu machen (indem ich meine Frage anpasse), habe ich meine eigene Antwort verfeinert, um sie ein wenig zu klären.
Pierre.Vriens

Ich sollte klarstellen: Mit git checkout werden Objekte aus dem Repository ausgecheckt. Das kann eine Verzweigung oder eine einzelne Datei sein.
Dave Swersky

4

Stellen Sie sich zentrale Systeme wie eine technische Bibliothek vor. (Könnte ein Stück der Vorstellungskraft sein, wie diese hypothetische Bibliothek funktioniert ...)

Wenn Sie ein Autor eines Dokuments sind, können Sie checkoutdie Bibliothek kopieren, Änderungen vornehmen und sie check it back inan die Bibliothek zurückgeben, damit die Welt sie sehen kann.

Dies kann zu einem Problem werden, wenn die Bibliothek über digitale Kopien verfügt und ich checkoutein Dokument, jemand anderes auch checks outein Dokument, wir beide Änderungen vornehmen. Es kommt zu einem Konflikt (Zusammenführungskonflikt), der möglicherweise schwierig zu lösen ist. Wann ist dann die erste "Korrektur" für diese exklusive checkoutFunktionalität ...


Natürlich für Großprojekte ist die Wahrscheinlichkeit für einen kritischen merge Konflikt Problem reduziert ( die Menschen auf den verschiedenen Teilen des Systems arbeiten werden) so checkout/ checkinist nicht annähernd so viel benötigt. Und da verteilte Systeme vom Design her neben vielen anderen Vorteilen eine gute Zusammenführungsfunktionalität erfordern, gibt es dieses Konzept in Git und anderen DVCS nicht wirklich


Das ist eine andere Sichtweise. Aus meiner Erfahrung halte ich es jedoch nicht für eine gute Idee, auch Dinge wie "Konflikte" und "Zusammenführen" hinzuzufügen (wenn sie sich beim Ein- und Auschecken noch nicht einmal wohl fühlen).
Pierre.Vriens

Fair, ich habe es hinzugefügt, weil es den Hauptgrund dafür gibt, dass es Check-out / Check-in gibt, an den ich denken könnte. Und das Gefühl, ein Konzept zu erfassen, ist besonders schwierig, wenn Sie nicht wissen, wofür dieses Konzept tatsächlich nützlich ist.
Thymine

2

Mit dem SCM-Repository als Hauptthema dann '

  • Kasse wird Änderungen immer aus der lokalen oder Remote - Repository (in Ihrem lokalen Arbeitsverzeichnis).
  • Beim Einchecken werden die Änderungen wieder in das lokale oder Remote-Repository (aus Ihrem lokalen Arbeitsverzeichnis) übernommen.

Merci für diese Antwort auch . Das ist in der Tat ein Weg, es zu erklären, obwohl ich mich immer noch frage, ob Sie sich eine Art "Metapher" vorstellen können (wie in meiner Frage). Zum Beispiel, um es jemandem zu erklären, den Sie unterrichten würden, der nicht einmal eine Ahnung hat, was ein lokales oder entferntes Repository wirklich ist.
Pierre.Vriens

Stimmt, wenn sie keine Ahnung haben, was ein Repository ist, ist der Versuch, das Ein- und Auschecken zu lehren, bedeutungslos. Nun können Sie eine Metapher für die Quellcodeverwaltung im Allgemeinen mit der Finanzbuchhaltung / Buchhaltung vergleichen. Sie verfolgt grundsätzlich die Wertänderungen von Vermögenswerten. Sie erfassen entweder einzelne Änderungen oder Gruppen von Änderungen (z. B. "Reisen von A nach B" anstatt Taxiticket + Busticket + Bahnticket + ...), jedoch nicht zu große Gruppen (z. B. "Alle Ausgaben am Montag"). In ähnlicher Weise verfolgt ein Repository Quellcodeänderungen, einzelne oder nicht zu große Gruppen.
Hlovdal

1
  • Checkout ist eine exklusive Sperre für das Ändern eines Objektzweigs in einem Repository.
  • Das Einchecken ist eine Freigabe der exklusiven Sperre.

Abhängig von der kleinsten Verzweigungseinheit gibt es zwei Arten von Quellcodeverwaltungssystemen.

1) Verzweigung nach Repository (CVS, SVN, GIT, Perforce usw.)

In Produkten, in denen Sie das gesamte Repository verzweigen, werden durch das Auschecken normalerweise Änderungen an der lokalen Verzweigung (Kopie) des gesamten Repository erstellt oder aktiviert. In diesen Produkten checkin ist oft ungenutzt und wird zu einem Teil der Commit - Operation, die auf einmal Kasse entfernten Zweig, die lokalen Anwendung Patch und checkin im Einzelbetrieb des Fern Zweig. Sie checken Ihre lokale Filiale nicht ein, da sie permanent ausgecheckt ist. (Hinweis: In GIT verpflichten Sie sich nicht zur Remote-Verzweigung, sondern übertragen Ihr lokales Commit darauf. Strikter syntaktischer Unterschied. )

2) Pro Objekt Verzweigung (ClearCase, AccuRev, Oracle ADE)

In Produkten , bei denen man einzelne Objekte verzweigen, wie Verzeichnisse, Dateien usw. Das Konzept der Kasse und checkin gilt pro Objekt pro Zweig. Sie sperren das Objekt, um es mit checkout zu ändern, und geben es mit checkin frei . In diesen Produkten arbeiten Sie häufig in einem privaten Zweig, in dem Sperren niemanden daran hindern, zu arbeiten, und zum Zeitpunkt der Zusammenführung Ihres lokalen Zweigs in einen gemeinsam genutzten Zweig werden die Objekte auch in einem Shard - Zweig (Haupt -, Master -, Feature - Zweig usw.) Ausgecheckt ) Zusammenführungskonflikte werden gelöst und das Objekt wird in der gemeinsam genutzten Verzweigung eingecheckt . Auf diese Weise können mehrere Personen gleichzeitig einen Commit für einen freigegebenen Zweig ausführen, sofern sie nicht dieselben Objekte ändern.


Hey Jiri, merci für deine Antwort. Für diese beiden Arten, die Sie erwähnt haben, würde ich zustimmen. Aber in den SCM-Tools in der Mainframe-Welt (woher meine Erfahrung stammt) wird "Sperren" nicht berücksichtigt ... Können Sie sich eine Möglichkeit vorstellen, Ihrer Antwort eine dritte Art hinzuzufügen?
Pierre.Vriens

Können Sie mir ein Beispiel für ein Produkt nennen, das nicht in diese beiden Kategorien passt? Ich kann dir entweder sagen, welche der beiden passt, oder eine dritte hinzufügen, wenn es wirklich eine gibt. Auschecken und Einchecken sind Vorgänge in einer Niederlassung, die das Recht zur Änderung dieser Niederlassung gewähren und freigeben. Eine Unterteilung in Produktzweige (gesamtes Repository oder einzelne Objekte) ist daher für diese Frage selbstverständlich. Ich weiß nicht, ob sich irgendetwas dazwischen befindet, was wäre das? Das Verzweigen von Teilbäumen wie in Perforce und Subgit ist im Wesentlichen die erste Kategorie. Lock ist nur ein anderer Name für ein "exklusives Recht auf".
Jiri Klouda

Übrigens, die oben erwähnte Metapher der Bibliothek ist wirklich gut. Wenn Sie ein Buch auschecken, erhalten Sie ein exklusives Recht darauf. Du nimmst es mit nach Hause und machst damit, was du willst. Lesen Sie es oder kritzeln Sie Notizen an den Rändern, und niemand kann das Buch ändern, während Sie es ausgecheckt haben. Entfernen Sie zum Beispiel einige Seiten oder markieren Sie einige Zeilen. Wenn Sie das Buch einchecken, können die Leute es in der Bibliothek lesen, wo das wachsame Auge des Bibliothekars keine Änderungen (Vandalismus) zulässt, oder es auschecken und mit nach Hause nehmen. Die Änderungen an diesem Buch werden serialisiert.
Jiri Klouda

Um die Analogie fortzusetzen, könnte es in einem anderen Zweig der Bibliothek dasselbe Buch mit verschiedenen Modifikationen geben oder völlig unverändert oder überhaupt nicht. Jemand anderes kann es dort zur gleichen Zeit auschecken (dh das Auschecken erfolgt pro Filiale). Jetzt arbeitet der Originalautor an der 2. Auflage, sozusagen einem Masterzweig. Er konnte Notizen aus mehreren Zweigen lesen, zusammenführen, den Hauptzweig auschecken und eine 2. Ausgabe einchecken. Jede Zweigstelle der Bibliothek aktualisiert ihr Exemplar, indem sie eine 2. Ausgabe kauft. Sie können den 1. verwerfen oder noch nützliche Notizen vom Rand in die neue Ausgabe kopieren.
Jiri Klouda
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.