每个开发人员应该知道什么是基本的清晰概念?

每个开发人员应该知道Clearcase版本控制系统的核心概念是什么?
核心概念?

>集中式(-replicated)VCS:ClearCase在集中式VCS世界(一个或多个“集中式”回卷或VOBS – 版本对象基础 – 每个开发人员必须访问提交)和分布式VCS世界之间。
但它还支持“复制”模式,允许您复制远程站点(MultiSite ClearCase)中的仓库,发送增量和管理所有权。 (附带的许可证费用是相当陡峭)
这不是一个真正的“分散”模型,因为它不允许并行并行演变:分支在一个VOB或另一个VOB中被掌握;你只能签入到主控VOB的分支掌握那里,虽然你有只读访问任何分支在任何副本。
>线性版存储:每个文件和目录都有一个线性历史;它们之间没有直接的关系,如DAG VCS(Directed Acyclic Graph),其中文件的历史记录链接到链接到提交的目录之一。
这意味着

>当你比较两个提交,你必须比较所有文件和目录的列表以找到增量,因为提交不是原子的跨文件或目录,意味着没有单一的名称,所有的更改所有的文件组成逻辑delta。
>这也意味着merge必须通过历史探索找到一个共同的base contributor(不总是相同的共同祖先)(见下一点)。

(Git在那个频谱的另一端,既是分散的,又是DAG的:

>如果其图的节点具有与不同提交的节点相同的“id”,则其不必进一步探索:所有子图被保证是相同的
>两个分支的合并实际上是DAG中两个节点的内容的合并:递归并且非常快速地找到共同的祖先)

> 3-way合并:合并两个版本,ClearCase必须在其线性历史中找到一个基于共同的贡献者,它可以是fairly long for complex version tree(分支/子分支/子子/分支,…)和基本ClearCase merge命令合并文件或目录,但它不是递归的。它只影响单个文件,或单个目录没有其文件(ct findmerge是递归)
>以文件为中心(相对于其他最近的VCS更多的以库为中心):这意味着提交是文件,而不是“修改的文件集”:事务是在文件级别。几个文件的提交不是原子的。
(几乎所有其他现代工具都是“以库为中心”的,有一个原子提交事务,但是像RCS,SCCS,CVS和大多数其他旧系统的第一代系统没有这个特性。)
> id-managed:每个文件和目录有一个唯一的id,意味着他们可以重命名为:他们的历史不会改变,因为id保留为“元素”。加一个目录将检测其历史中任何添加/抑制的文件。当文件被“删除”(rmname)时,它不知道它:只有目录被通知并在其历史中创建一个新版本,其中一个子元素的列表不包括删除的文件。

(创建两个相同大小和内容的文件,他们将在Git中获得相同的ID – 一个SHA1密钥 – 并且在Git仓库中只存储一次!在ClearCase中不是这样。
另外,如果在两个不同的分支中创建具有相同路径和名称的两个文件,它们的id是不同的意味着这两个文件将永远不会被合并:它们被称为“邪恶双胞胎”

>分支是一流的公民:大多数VCS认为分支和标记是相同的:历史中的一个点,新的线性历史可以从中增长(分支)或从其中附加描述(标签)。
对于ClearCase不是这样,其中分支是引用版本号的一种方法。任何版本号从0开始(仅在ClearCase中引用)为1,2,3,依此类推。每个分支可以包含新的版本号列表(再次为0,1,2,3)。
这与其他系统不同,其中版本号是唯一的,并且总是增长(如SVN中的修订),或者是唯一的(如Git中的SHA1密钥)。
> path-accessible:访问某个版本的文件/目录,需要知道其扩展路径(由分支和版本组成)。它被称为“扩展路径名”:myFile @@ / main / subBranch / Version。

(Git指的是通过id – 基于SHA1的 – :version [或commit],tree [或目录的版本]和blob [或文件的版本,或者更确切地说是文件的内容]它是“id访问”或“id引用”。
对于ClearCase,id是指“元素”:目录或文件,无论它的版本是什么)。

>悲观锁和乐观锁:(在ClearCase中保留或未保留检出):即使是悲观锁(保留检出)也不是真正的悲观锁,因为其他用户仍然可以检出该文件(尽管处于“未保留模式”):可以更改它,但必须等待第一个用户提交他的文件(签入)或取消请求。然后他们将合并同一个文件的检出版本。
(注意:“保留”检出可以释放其锁定,并由所有者或管理员取消保留)
> cheap branches:分支不会触发所有文件的副本。它实际上没有触发:任何文件未签出将保留在其原始分支。只有修改的文件将其新版本存储在声明的分支中。
>平面文件存储:VOB以专有格式存储有简单文件。这不是一个具有简单查询语言的数据库。
>本地或网络工作空间访问:

>本地工作区通过检查到硬盘驱动器(快照视图的“更新”)。
>网络工作空间是通过动态视图,组合版本化的文件和目录通过网络(无本地拷贝,即时访问)和本地文件(检出的或私有文件)访问。远程(版本化)和本地(私有)文件的组合允许动态视图看起来像经典硬盘驱动器(而实际上任何文件“写”存储在相关联的视图存储器中)。

>集中式逐出存储:[视图]存储是有保留一些数据和避免一些或任何与中央参考的通信。
工作空间可以有:

>一个分散的存储:就像.svn的子目录遍布整个地方
>集中存储:像ClearCase中的视图存储,它们包含有关视图显示的文件的信息,并且该存储对于视图是唯一的。
>逐出存储:存储不是视图/工作空间本身的一部分,但可以位于计算机上的其他位置,甚至位于LAN / WAN外部

(Git本身没有“存储”,它的.git实际上是所有的存储库!)

>面向元数据:任何“键值”都可以附加到文件或目录,但是数据对本身不会历史化:如果值更改,它将覆盖旧值。

(意味着机制实际上比SVN的“属性”系统弱,其中属性可以具有历史;
Git在另一端不太热衷于元数据)

>基于系统的保护:所有者和与文件/目录相关联的权限基于底层系统的权限管理。在ClearCase中没有应用帐户,用户组直接基于Windows或Unix现有组(这在异构环境中非常具有挑战性,Windows客户端和Unix VOB服务器!)

(SVN更像是“基于服务器”的保护,其中Apache服务器可以获得第一级保护,但是必须使用钩子来完成更好的权限。
Git没有直接的权限管理,并且在存储库之间的推或拉期间必须由钩子控制)

> hooks可用:任何ClearCase动作都可以作为钩子的目标,称为触发器。它可以是前操作或后操作。
> CLI managed:cleartool是可以执行所有操作的命令行界面。

http://stackoverflow.com/questions/645008/what-are-the-basic-clearcase-concepts-every-developer-should-know

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:每个开发人员应该知道什么是基本的清晰概念?