В чем разница между регистрацией и оформлением заказа?

14

При преподавании классов SCM студентам, которые не знакомы с управлением конфигурацией программного обеспечения, возникает вопрос, который выглядит как " What's the difference between checkin and checkout?".

И вариация этого заключается в том, что такие студенты запутываются в этих концепциях SCM (они понимают их, как наоборот).

Так какую метафору вы можете использовать, чтобы объяснить эту важную концепцию SCM такой аудитории?

Pierre.Vriens
источник
проверка = блокировка; checkin = разблокировать; Вы берете эксклюзивную блокировку для редактирования рассматриваемого объекта в ветви, над которой вы выполняете операцию.
Иржи Клауда

Ответы:

8

Чтобы что-то кому-то объяснить, попытайтесь сравнить это с тем, с чем они (надеюсь) уже знакомы.

Поэтому я просто отвечаю на такой вопрос:

Думайте об этом как о прибытии в место для проживания (отель, курорт и т. Д.):

  • самое первое, что вы делаете (когда вы приедете), это checkin.
  • самое последнее, что вы делаете (когда уходите) - это checkout.

Аналогичная концепция SCM применяется, когда вы хотите применить изменения к программным компонентам ... за исключением того, что она применяется наоборот :

  • самое первое, что вы делаете (когда начинаете), это checkout(или думаете об этом, как о заимствовании).
  • самое последнее, что вы делаете (когда заканчиваете), это checkin(или думаете об этом, как о возвращении).

Примечание : это относится к централизованным системам (например, используемым в средах мэйнфреймов ...). В таких системах, как checkout понятие « » имеет совершенно другое значение (что, по мнению IMO, в этих системах вряд ли вызывает путаницу в отношении обеих концепций).

Pierre.Vriens
источник
Возможно, код больше похож на библиотечную книгу, чем на номер в отеле?
Тоби Спейт
Это довольно наивный ответ непрофессионала. Я работал в течение десяти лет над внутренними компонентами систем контроля версий, поэтому я добавил более подробный ответ на ваш вопрос.
Иржи Клауда
6

Важно отметить, что термины «регистрация» и «оформление заказа» имеют разные значения в зависимости от типа системы SCM.

Централизованные системы, такие как TFVC, Subversion и Clearcase, используют «эксклюзивные» проверки. Это похоже на метафору заимствования книги Пьера, где только один пользователь может получить файл за один раз.

Распределенные системы, такие как git, имеют команду checkout, но это означает что-то совершенно другое. git checkoutиспользуется для переключения между ветками при работе с локальным репозиторием.

Дейв Сверски
источник
Хороший вопрос Дэйву о распределенных системах! На самом деле, именно поэтому я сначала (когда я впервые узнал о GIT) был ужасно смущен. Чтобы не аннулировать ваш ответ (адаптировав мой вопрос), я уточнил свой собственный ответ, чтобы немного прояснить его.
Pierre.Vriens
Я должен уточнить: git checkout используется для извлечения объектов из хранилища. Это может быть ветвь или отдельный файл.
Дейв Сверски
4

Для централизованных систем думайте об этом как о технической библиотеке. (может быть, воображение, как функционирует эта гипотетическая библиотека ...)

Если вы являетесь автором документа, вы можете checkoutскопировать библиотеку, внести изменения, вернуть ее check it back inв библиотеку, чтобы ее увидел весь мир.

Это может стать проблемой, если в библиотеке есть цифровые копии, а я checkoutдокумент, кто-то еще и checks outдокумент, мы оба вносим изменения, возникает конфликт (конфликт слияния), который может быть трудно разрешить. Когда тогда первоначальное «исправление» для этого является эксклюзивным checkoutфункционалом ...


Конечно, для крупных проектов вероятность критической проблемы слияния уменьшается (люди будут работать в разных частях системы), поэтому checkout/ checkinне нужна почти так же. А поскольку распределенные системы по своему дизайну в некоторой степени требуют хорошей функциональности слияния, наряду со многими другими преимуществами, эта концепция на самом деле не существует в git и других DVCS.

тимин
источник
Это еще один способ взглянуть на это. Хотя по своему опыту я не думаю, что было бы неплохо добавлять такие вещи, как «конфликты» и «слияние» (если они еще не чувствуют себя комфортно при оформлении заказа и регистрации).
Pierre.Vriens
Честно говоря, я добавил его, потому что это главная причина, по которой я могу придумать checkout / checkin. И почувствовать, что понять концепцию очень сложно, если вы не знаете, для чего эта концепция действительно полезна.
Тимин
2

С хранилищем SCM в качестве основной темы

  • checkout - это получение изменений из локального или удаленного репозитория (в ваш локальный рабочий каталог).
  • checkin помещает изменения обратно в локальный или удаленный репозиторий (из вашего локального рабочего каталога).
hlovdal
источник
Мерси за этот ответ тоже . Это действительно способ объяснить это, хотя мне все еще интересно, можете ли вы подумать о какой-то «метафоре» (как в моем вопросе). Например, чтобы объяснить это кому-то, кого вы будете учить, у которого даже нет понятия, что такое локальный или удаленный репозиторий .
Pierre.Vriens
Правда, если они не имеют ни малейшего представления о том, что такое хранилище, то попытка научить регистрации и проверке будет бессмысленной. Теперь для метафоры управления исходным кодом в целом вы можете сравнить ее с финансовым учетом / бухгалтерией. Он принципиально отслеживает изменения стоимости активов. Вы записываете либо отдельные изменения, либо группы изменений (например, «Путешествие от А до В», а не билет на такси + билет на автобус + билет на поезд + ...), хотя группы не слишком большие (например, «Все расходы в понедельник»). Точно так же хранилище отслеживает изменения исходного кода, отдельные или не слишком большие группы.
Хловдал
1
  • Checkout - это эксклюзивная блокировка для изменения ветви объекта в хранилище.
  • Checkin - это выпуск эксклюзивной блокировки.

Существует два вида систем управления исходным кодом в зависимости от того, какая наименьшая единица ветвления.

1) Разветвление репозитория (CVS, SVN, GIT, Perforce и т. Д.)

В продуктах, в которых вы разветвляете весь репозиторий, checkout обычно либо создает, либо включает изменения в локальной ветви (копии) всего репозитория. В этих продуктах регистрация часто не используется и становится частью операции фиксации , которая является одновременно проверкой удаленной ветви, применением локального исправления и регистрацией удаленной ветви в одной операции. Вы не регистрируетесь в своем местном отделении, поскольку оно постоянно проверено. (Примечание: в GIT вы не фиксируете удаленную ветвь, вы помещаете в нее локальную фиксацию. Строго синтаксическая разница. )

2) Для каждого ветвления объекта (ClearCase, AccuRev, Oracle ADE)

В продуктах, где вы разветвляете отдельные объекты, такие как каталоги, файлы и т. Д. Концепция извлечения и регистрации применяется для каждого объекта в ветви. Вы заблокируете объект, чтобы изменить его с помощью checkout и освободить его с помощью checkin . В этих продуктах вы часто работаете в частной ветви, где блокировки никому не мешают работать, и во время слияния вашей локальной ветви в общую ветку объекты также извлекаются в ветке сегмента (основной, основной, ветвь функций и т. Д.). ) конфликты слияния разрешаются и объект проверяется в общей ветке. Это позволяет нескольким людям одновременно «фиксировать» в общей ветке, если они не изменяют одни и те же объекты.

Иржи Клауда
источник
Привет, Иржи, Мерси за твой ответ. Для тех двух видов, которые вы упомянули, я бы согласился. Но в инструментах SCM в мире мэйнфреймов (откуда был мой опыт) никто не учитывает «блокировку» ... Можете ли вы придумать способ добавить третий тип ответа?
Pierre.Vriens
Можете ли вы привести пример продукта, который не подходит под эти две категории? Я могу либо сказать вам, какой из 2 он подходит, либо добавить третий, если он действительно есть. Оформление заказа и регистрация - это операции над веткой, дающие и освобождающие право на их изменение. Таким образом, разделение на то, что продукт разветвляется (целый репозиторий или отдельные объекты), является естественным для этого вопроса. Я не знаю, есть ли между ними что-нибудь, что бы это было? Ветвление поддеревьев, как в Perforce и Subgit, по существу является первой категорией. Lock - это просто другое название для «эксклюзивного права на».
Иржи Клуда
Кстати, метафора библиотеки, как упоминалось ранее, действительно хорошая. Оформляя заказ, вы получаете эксклюзивное право на нее. Вы берете его домой и делаете с ним, как вам угодно. Прочитайте его или даже нарисуйте заметки на полях, и никто другой не сможет изменить книгу, пока она у вас есть. Как удалить некоторые из его страниц или выделить несколько строк. Когда вы проверяете книгу, люди могут прочитать ее в библиотеке, где бдительный глаз библиотекаря не допускает никаких изменений (вандализм), или проверить ее и забрать домой. Он сериализует изменения в этой книге.
Иржи Клауда
Чтобы продолжить аналогию, в другой ветви библиотеки может быть одна и та же книга с разными модификациями или совершенно без изменений или вообще не изменяться. Кто-то еще может проверить это там в то же самое время (то есть оформить заказ за филиал). Сейчас автор работает над 2-м изданием, так сказать, основной веткой. Он мог читать заметки из нескольких веток, объединять их вместе, проверять основную ветку и проверять во 2-м издании. Каждая ветвь библиотеки обновит свою копию, купив второе издание. Они могут отказаться от 1-го или скопировать все еще полезные заметки с полей в новое издание.
Иржи Клуда