Ao dar aulas de SCM para alunos que são novos no Software Configuration Management, ocorre uma pergunta como " What's the difference between checkin and checkout?
".
E uma variação disso é que esses estudantes ficam confusos sobre esses conceitos de SCM (eles os entendem como o contrário).
Então, que tipo de metáfora você pode usar para explicar esse conceito crucial de SCM para esse público?
terminology
scm
Pierre.Vriens
fonte
fonte
Respostas:
Para explicar algo a alguém, tente compará-lo a algo com o qual eles já estão (espero) familiarizados.
É por isso que eu apenas respondo a essa pergunta assim:
Nota : isso se aplica a sistemas centralizados (como os usados em ambientes de mainframe ...). Em sistemas como o " " git, o
checkout
conceito " " tem um significado completamente diferente (pelo que a IMO também explica porque nesses sistemas quase não há confusão sobre os dois conceitos).fonte
É importante observar que os termos "check-in" e "check-out" têm significados diferentes, dependendo do tipo de sistema SCM.
Sistemas centralizados como TFVC, Subversion e Clearcase usam caixas "exclusivas". É como a metáfora de empréstimo de livros de Pierre, em que apenas um usuário pode fazer o check-out de um arquivo por vez.
Sistemas distribuídos como o git têm um comando "checkout", mas significa algo completamente diferente.
git checkout
é usado para alternar entre ramificações ao trabalhar com um repositório local.fonte
Para sistemas centralizados, pense nisso como uma biblioteca técnica. (pode ser um pouco da imaginação de como essa hipotética biblioteca funciona ...)
Se você é o autor de um documento, poderá
checkout
copiar a biblioteca, fazer alterações, devolvê-locheck it back in
à biblioteca para o mundo ver.Isso pode se tornar um problema se a biblioteca tiver cópias digitais, e eu
checkout
um documento, outra pessoa tambémchecks out
um documento, nós dois fizermos alterações, haverá um conflito (conflito de mesclagem) que pode ser difícil de resolver. Quando então a "correção" inicial para isso é umacheckout
funcionalidade exclusiva ...É claro que, para grandes projetos, as chances de um problema crítico de conflito de mesclagem são reduzidas (as pessoas estarão trabalhando em diferentes partes do sistema), portanto
checkout
/checkin
não é necessário quase o mesmo. E como os sistemas distribuídos por design exigem uma boa funcionalidade de mesclagem, junto com muitos outros benefícios, esse conceito não existe realmente no git e em outros DVCSfonte
Com o repositório SCM como assunto principal, então '
fonte
Existem dois tipos de sistemas de controle de origem, dependendo da menor unidade de ramificação.
1) Por ramificação de repositório (CVS, SVN, GIT, Perforce, ... etc)
Nos produtos em que você ramifica todo o repositório, o checkout geralmente cria ou habilita modificações na ramificação local (cópia) de todo o repositório. Nesses produtos, o check - in geralmente não é utilizado e se torna parte da operação de confirmação , que é ao mesmo tempo check-out da filial remota, aplicação de patch local e check - in da filial remota em operação única. Você não faz check-in na sua filial local, pois esta é permanentemente retirada. (Nota: No GIT, você não se compromete com a ramificação remota, envia sua confirmação local a ela. Diferença estritamente sintática. )
2) Por ramificação de objeto (ClearCase, AccuRev, Oracle ADE)
Nos produtos em que você ramifica objetos individuais, como diretórios, arquivos etc. O conceito de check - out e check - in se aplica por objeto por ramo. Você bloqueará o objeto para modificá-lo no checkout e liberará no check - in . Nesses produtos, você costuma trabalhar em uma ramificação privada onde os bloqueios não impedem ninguém de trabalhar e, no momento da mesclagem de sua ramificação local em uma ramificação compartilhada, os objetos também são verificados na ramificação de fragmento (principal, mestre, ramificação de recurso etc.) ) conflitos de mesclagem são resolvidos e o objeto é verificado na ramificação compartilhada. Isso permite que várias pessoas "confirmem" ao mesmo tempo em ramificações compartilhadas, desde que não modifiquem os mesmos objetos.
fonte