Jaka jest różnica między odprawą a wypłatą?

14

Podczas nauczania zajęć SCM dla studentów, którzy nie znają się na oprogramowaniu do zarządzania konfiguracją oprogramowania, zdarza się, że pojawia się pytanie takie jak „ What's the difference between checkin and checkout?”.

Odmiana polega na tym, że tacy uczniowie są zdezorientowani tymi koncepcjami SCM (rozumieją ich na odwrót).

Jakiego rodzaju metafory możesz użyć do wyjaśnienia tej kluczowej koncepcji SCM takim odbiorcom?

Pierre.Vriens
źródło
kasa = zamek; meldowanie = odblokowanie; Bierzesz wyłączną blokadę, aby edytować przedmiotowy przedmiot w gałęzi, na której wykonujesz operację.
Jiri Klouda,

Odpowiedzi:

8

Aby coś komuś wyjaśnić, spróbuj porównać to z czymś, co (mam nadzieję) już zna.

Dlatego właśnie odpowiadam na takie pytanie:

Pomyśl o tym jako o przybyciu do miejsca pobytu (hotelu, ośrodka itp.):

  • bardzo pierwszą rzeczą, jaką można zrobić (po przyjeździe) jest checkin.
  • bardzo ostatnia rzecz, którą zrobić (po opuszczeniu) jest checkout.

Podobna koncepcja SCM ma zastosowanie, gdy chcesz zastosować zmiany w komponentach oprogramowania ... z tą różnicą, że :

  • bardzo pierwszą rzeczą, jaką można zrobić (podczas uruchamiania) jest checkout(lub myśleć o tym jak pożyczanie go).
  • bardzo ostatnia rzecz, którą zrobić (po zakończeniu) jest checkin(lub myśleć o tym jak daje go z powrotem).

Uwaga : dotyczy to scentralizowanych systemów (takich jak te stosowane w środowiskach komputerów mainframe ...). W systemach takich jak checkout koncepcja „ ” ma zupełnie inne znaczenie (co IMO również powoduje, że w tych systemach nie ma prawie żadnych wątpliwości co do obu koncepcji).

Pierre.Vriens
źródło
Być może kod bardziej przypomina książkę do biblioteki niż pokój hotelowy?
Toby Speight
To dość naiwna, świecka odpowiedź. Przez dekadę pracowałem nad wewnętrznymi systemami kontroli źródła, więc dodałem nieco bardziej szczegółową odpowiedź na twoje pytanie.
Jiri Klouda,
6

Ważne jest, aby pamiętać, że terminy „zameldowanie” i „kasa” mają różne znaczenia w zależności od rodzaju systemu SCM.

Scentralizowane systemy, takie jak TFVC, Subversion i Clearcase, wykorzystują „ekskluzywne” kasy. To jest jak metafora pożyczania książek Pierre'a, w której tylko jeden użytkownik może pobrać plik jednocześnie.

Systemy rozproszone, takie jak git, mają polecenie „kasy”, ale oznacza to coś zupełnie innego. git checkoutsłuży do przełączania między oddziałami podczas pracy z lokalnym repozytorium.

Dave Swersky
źródło
Dobra uwaga Dave'a na temat systemów rozproszonych! Właściwie dlatego też na początku (kiedy dowiedziałem się o GIT) byłem strasznie zdezorientowany. Aby nie unieważnić twojej odpowiedzi (dostosowując moje pytanie), poprawiłem własną odpowiedź, aby ją trochę wyjaśnić.
Pierre.Vriens
Powinienem wyjaśnić: git checkout służy do wypisywania obiektów z repozytorium. Może to być gałąź lub pojedynczy plik.
Dave Swersky
4

W przypadku systemów scentralizowanych pomyśl o tym jak o bibliotece technicznej. (może to być wyobraźnia, jak funkcjonuje ta hipotetyczna biblioteka ...)

Jeśli jesteś autorem dokumentu, możesz checkoutskopiować bibliotekę, wprowadzić zmiany, zwrócić ją check it back indo biblioteki, aby świat mógł ją zobaczyć.

Może to stać się problemem, jeśli biblioteka ma kopie cyfrowe, a ja checkoutdokument, ktoś inny również checks outdokument, oboje wprowadzamy zmiany, wystąpi konflikt (konflikt scalania), który może być trudny do rozwiązania. Kiedy zatem początkowa „poprawka” w tym celu ma wyłączną checkoutfunkcjonalność ...


Oczywiście w przypadku dużych projektów szanse na krytyczny problem konfliktu scalania są zmniejszone (ludzie będą pracować nad różnymi częściami systemu), więc checkout/ checkinnie jest ono potrzebne tak bardzo. A ponieważ rozproszone systemy z założenia wymagają dobrej funkcjonalności scalania, a także wielu innych korzyści, ta koncepcja tak naprawdę nie istnieje w Git i innych DVCS

Tymina
źródło
To inny sposób na to spojrzeć. Chociaż z mojego doświadczenia nie sądzę, że dobrym pomysłem jest dodawanie takich rzeczy jak „konflikty” i „łączenie” (jeśli nawet nie czują się komfortowo przy kasie i odprawie).
Pierre.Vriens
Jasne, dodałem go, ponieważ jest to główny powód, dla którego istnieje kasy / meldowanie, o którym mogłem myśleć. I poczuć, że zrozumienie koncepcji jest wyjątkowo trudne, jeśli nie wiesz, do czego ta koncepcja jest naprawdę przydatna.
Thymine,
2

Z repozytorium SCM jako głównym tematem, a następnie „

  • Zamówienie jest uzyskanie zmiany out z lokalnym lub zdalnym repozytorium (do lokalnego katalogu roboczego).
  • Checkin odkłada zmiany z powrotem do lokalnego lub zdalnego repozytorium (z lokalnego katalogu roboczego).
hlovdal
źródło
Merci dla tej odpowiedzi również . To rzeczywiście sposób na wyjaśnienie tego, choć wciąż zastanawiam się, czy możesz pomyśleć o jakiejś „metaforze” (jak w moim pytaniu). Na przykład, aby wyjaśnić to komuś, kogo uczysz, kto nawet nie ma pojęcia, czym tak naprawdę jest lokalne lub zdalne repozytorium .
Pierre.Vriens
To prawda, że ​​jeśli nie mają pojęcia o tym, co repozytorium próbuje nauczyć się meldowania, a kasa będzie bez znaczenia. Teraz, jeśli chodzi o metaforę kontroli źródła, można ją porównać do rachunkowości finansowej / księgowości. Zasadniczo śledzi zmiany wartości aktywów. Rejestrujesz pojedyncze zmiany indywidualne lub grupy zmian (np. „Podróż z A do B” zamiast biletu taksówki + bilet autobusowy + bilet kolejowy + ...), chociaż niezbyt duże grupy (np. „Wszystkie wydatki w poniedziałek”). Podobnie repozytorium śledzi zmiany w kodzie źródłowym, poszczególnych lub niezbyt dużych grup.
hlovdal
1
  • Kasa jest wyłączną blokadą modyfikacji gałęzi obiektu w repozytorium.
  • Checkin to wydanie wyłącznej blokady.

Istnieją dwa rodzaje systemów kontroli źródła w zależności od najmniejszej jednostki rozgałęzienia.

1) Oddziaływanie na repozytorium (CVS, SVN, GIT, Perforce, ... itd.)

W produktach, w których rozgałęzia się całe repozytorium, kasa zwykle tworzy albo włącza modyfikacje do lokalnego oddziału (kopii) całego repozytorium. W tych produktach rejestrowanie jest często nieużywane i staje się częścią operacji zatwierdzania , która jest jednocześnie kasowaniem zdalnego oddziału, zastosowaniem lokalnej poprawki i rejestrowaniem zdalnego oddziału w jednej operacji. Nie zameldujesz się w lokalnym oddziale, ponieważ jest on na stałe wyrejestrowany. (Uwaga: w GIT nie zatwierdzasz zdalnej gałęzi, wpychasz do niej lokalne zatwierdzenie. Ściśle różnica składniowa. )

2) Rozgałęzienia dla poszczególnych obiektów (ClearCase, AccuRev, Oracle ADE)

W produktach, w których rozgałęziasz pojedyncze obiekty, takie jak katalogi, pliki itp. Pojęcie pobierania i zameldowania dotyczy każdego obiektu na gałąź. Zablokujesz obiekt, aby go zmodyfikować przy kasie i zwolnisz przy kasowaniu . W tych produktach często pracujesz w oddziale prywatnym, w którym zamki nie blokują nikogo do działania, a podczas scalania oddziału lokalnego w oddziale współdzielonym obiekty są również sprawdzane w oddziale odłamka (główny, główny, gałąź funkcji itp. ) konflikty scalania są rozwiązywane, a obiekt jest sprawdzany we współdzielonej gałęzi. Umożliwia to wielu osobom jednoczesne „zatwierdzenie” do udostępnionego oddziału, o ile nie modyfikują tych samych obiektów.

Jiri Klouda
źródło
Hej Jiri, litość za twoją odpowiedź. Za te dwa wymienione przez ciebie rodzaje zgodziłbym się. Ale w narzędziach SCM w świecie komputerów mainframe (skąd pochodzi moje doświadczenie) nie bierze się pod uwagę „blokowania” ... Czy możesz wymyślić sposób na dodanie trzeciego rodzaju do swojej odpowiedzi?
Pierre.Vriens
Czy możesz podać przykład produktu, który nie pasuje do tych dwóch kategorii? Mogę albo powiedzieć, który z nich pasuje, albo dodać trzeci, jeśli tak naprawdę jest. Kasa i meldowanie to operacje na oddziale dające i zwalniające prawo do jego modyfikacji. Zatem podział na to, co rozgałęzia się produkt (całe repozytorium lub pojedyncze obiekty) jest naturalne dla tego pytania. Nie wiem czy jest coś pośredniego, co by to było? Rozgałęzienie poddrzewa jak w Perforce i Subgit jest zasadniczo pierwszą kategorią. Lock to po prostu inna nazwa „wyłącznego prawa do”.
Jiri Klouda,
BTW Wspomniana wcześniej metafora biblioteczna jest naprawdę dobra. Kiedy kasujesz książkę, zyskujesz do niej wyłączne prawo. Zabierasz go do domu i robisz to, co chcesz. Przeczytaj ją, a nawet napisz notatki na marginesie, a nikt inny nie może modyfikować książki, dopóki ją wypisasz. Jak usunąć niektóre strony lub wyróżnić niektóre wiersze. Kiedy zameldujesz się w książce, ludzie mogą przeczytać ją w bibliotece, gdzie czujne oko bibliotekarza nie dopuszcza żadnych modyfikacji (wandalizmu) lub sprawdź i zabierz do domu. Serializuje zmiany w tej książce.
Jiri Klouda
Aby kontynuować analogię, w innej gałęzi biblioteki, ta sama książka może być tam z różnymi modyfikacjami lub całkowicie niezmieniona lub wcale. Ktoś inny może to sprawdzić w tym samym czasie (tzn. Realizacja zamówienia przypada na oddział). Teraz oryginalny autor pracuje nad drugą edycją, że tak powiem, główną gałęzią. Mógł czytać notatki z wielu gałęzi, łączyć je ze sobą, sprawdzać gałąź główną i sprawdzać drugie wydanie. Każda gałąź biblioteki odświeży swoją kopię, kupując 2. wydanie. Mogą odrzucić 1. lub skopiować wciąż przydatne notatki z marginesów do nowej edycji.
Jiri Klouda,