当向不熟悉软件配置管理的学生讲授SCM课程时,碰巧会出现类似“ What's the difference between checkin and checkout?
”的问题。
与此不同的是,这些学生对这些SCM概念感到困惑(反过来,他们也理解它们)。
那么,您可以使用哪种隐喻向此类受众解释这一至关重要的SCM概念?
当向不熟悉软件配置管理的学生讲授SCM课程时,碰巧会出现类似“ What's the difference between checkin and checkout?
”的问题。
与此不同的是,这些学生对这些SCM概念感到困惑(反过来,他们也理解它们)。
那么,您可以使用哪种隐喻向此类受众解释这一至关重要的SCM概念?
Answers:
要向任何人解释某些内容,请尝试将其与他们(希望)已熟悉的内容进行比较。
这就是为什么我只回答这样的问题:
将其视为到达某个住宿地点(酒店,度假村等):
- 非常第一你做的(当你到达)的事情是
checkin
。- 非常最后你做的(当你离开)的事情是
checkout
。当您想对软件组件进行更改时,也可以采用类似的SCM概念...除此之外,还可以采用其他方法:
- 非常第一你做的(当你开始)的事情是
checkout
(或把它想借用它)。- 非常最后你做的(当你完成)的事情是
checkin
(或把它想给它回来)。
注意:这适用于集中式系统(例如大型机环境中使用的系统...)。在像git这样的系统中,“ checkout
”概念的含义完全不同(这也是IMO的原因,在这两个系统中几乎没有混淆这两个概念)。
重要的是要注意,根据SCM系统的类型,术语“签入”和“签出”具有不同的含义。
诸如TFVC,Subversion和Clearcase之类的集中式系统使用“排他”签出。这就像皮埃尔(Pierre)的书借用比喻,其中只有一个用户可以一次检出一个文件。
像git这样的分布式系统具有“ checkout”命令,但这意味着完全不同的东西。git checkout
用于在使用本地存储库时在分支之间切换。
对于集中式系统,请将其视为技术库。(可能是这种假想库如何发挥作用的想象力……)
如果您是文档的作者,则可以checkout
将库复制,进行更改,然后check it back in
将其返回给库以供全世界查看。
如果图书馆拥有数字副本,并且我checkout
有一个文档,另一个人还有checks out
一个文档,我们都进行更改,那么将会出现问题(合并冲突),这可能很难解决,这可能会成为一个问题。那么最初的“修复”是排他性checkout
功能...
当然,对于大型项目的关键合并冲突问题的几率降低(人会使用的系统的不同部分),这样checkout
/ checkin
不需要几乎一样多。而且由于设计上的分布式系统在某种程度上需要良好的合并功能以及许多其他好处,因此该概念在git和其他DVCS中并不存在
然后以SCM存储库为主要主题”
- 检出是修改存储库中对象分支的排他锁。
- 签入是互斥锁的释放。
根据分支的最小单位,有两种源控制系统。
1)每个存储库分支(CVS,SVN,GIT,Perforce等)
在分支整个存储库的产品中,签出通常会创建或启用对整个存储库的本地分支(副本)的修改。在那些产品中,检入经常不被使用,并成为提交操作的一部分,它是一次性签出远程分支,应用本地补丁并在单个操作中签入远程分支。您无需签入本地分支机构,因为它已被永久签出。(注意:在GIT中,您不提交到远程分支,而是将本地提交推送到它。严格的语法差异。)
2)每个对象分支(ClearCase,AccuRev,Oracle ADE)
在分支单个对象(例如目录,文件等)的产品中。签入和签入的概念适用于每个分支的每个对象。您将锁定对象以使用checkout修改它,并使用checkin释放它。在这些产品中,您经常在私有分支上工作,在该分支上锁不会阻止任何人工作,并且在将本地分支合并到共享分支时,对象也会在shard分支(主分支,主分支,功能分支等)上签出。 )解决合并冲突,并在共享分支上签入对象。只要他们不修改相同的对象,这便允许多个人同时“提交”到共享分支。