- 当我“keep”一些文件然后“promote”它们时会发生什么?
- 如果我没有推广刚才保留的相同文件怎么办?
- 为什么在发生非冲突(也称为重叠)更新时,历史记录有时会被错误归属?这特别类似于Subversion的一种故障模式,根据我听到的基本解释,我不认为Accurev应该存在这种情况。
- 为什么差异几乎永远不包含我期望的内容?我相信发生的事情是针对基础的差异显示我针对当前(移动)父流的差异,但我真正想要的是只看到我上次更新以来做出的更改。
免责声明:我最了解的源代码控制系统是SVN,因此我使用的术语,比如repo、checkout等可能有所偏见。此外,虽然我每天都在使用Accurev,但我很少涉足那些我感觉已经牢固掌握核心概念以外的领域。
一句话描述(带星号):Accurev是一个按时间顺序排列的仓库,为每个流/工作区的更改文件保留版本历史记录,并允许您在流中开发不同的代码版本,同时每个流都会从其父流和子*流透明地更新核心代码。
(*)只有当子流将更改推到父流时,父流才会被子流更新。
Accurev的主要优点在于轻松维护不同版本的代码。如果想理解它,不要寻找你熟悉的快速抽象或重新定义的术语。我建议查看示例并在需要时温和地解释术语。不幸的是,我只知道我需要知道的内容,但我会尝试…
(稍后再谈工作区。现在不必担心它们。)
当您创建一个从另一个流的父流创建的子流时,就像您执行了SVN分支操作来创建子流,但美妙的区别是,每次更新父流或子流时,SVN合并都会为您处理(或者在冲突存在且需要手动解决冲突时,提醒您)。
假设您开始有一个流,CompanyStream。您的代码库由该流管理,并且它具有您对文件所做更改的历史记录。然后,您决定在其中创建两个子流ChildStream1和ChildStream2。在CompanyStream中对文件进行的任何更改都将传播到两个子流中,因此它们始终具有从CompanyStream继承的最新代码。(版本更改的继承是Accurev中的一个基本概念。)同时,您正在ChildStream1中进行特定于一种供应商的开发,并在ChildStream2中进行特定于另一个供应商的更改。您可以有选择地决定从ChildStream1和2中哪些代码被提升到CompanyStream,但是在CompanyStream中进行的任何更改都应该是想要出现在两个子流中的内容。如果将代码从ChildStream1提升到CompanyStream,则这些更改会在ChildStream2中出现一次更新(因为它再次继承了CompanyStream)。我还没有提到工作区。 工作区表示您硬盘上的代码。 工作区类似于流,因为它可以具有历史记录,并且可以跟踪您所做的更改。 (这就是 Keep 所做的--它在您的工作区历史记录中存储在 Keep 操作期间指定的文件的快照。 您随时可以恢复到那些文件快照。 因此,一个工作区也可以被视为您自己的个人私有流,记录了对代码所做的更改。)
流是表示修订更改以及发生的事件历史记录的抽象概念。 流和工作区从其父流继承代码。 但是,与流不同,工作区不能具有子流或子工作区。 工作区就像树上的叶子; 流就像树枝。
您将其推广到流。 您在工作区中进行 Keep 操作。 推广的更改对所有可以看到该流的人都可见。 保留的更改仅对您(工作区的所有者)可见。
保留的文件将在您的工作区中具有快照(以防您以后想要恢复它们)。 推广的文件将在您将它们推广到的流中具有快照(可以这样说)。 最大的区别在于,推广的更改将向继承该流的任何流或工作区传播。
那么它们将只存在于您的工作区中。 此外,我认为当您进行推广时,Accurev 会首先进行保留操作(因此您的工作区和您要推广到的流都记录了文件更改)。
你能举个例子吗?我对Accurev的文件版本控制不是很清楚。我认为版本属性将由最近进行更改(而不是保留)的工作区或流分配。 可能存在一些流继承关系,导致文件具有看起来不正确的属性,直到你把它追溯出来。
然后针对“已备份”执行差异操作,而不是针对基础执行差异操作。
对我有效的简单配置是:我总是在一些公共开发流之外创建自己的个人私有流。然后,当我想要签入(或能够还原到)的更改时,我将其提升到自己的流中。我继续在我的工作区中工作,如果我想要将我的工作区与以前所做的内容或正在进行的更改进行比较,则会针对Backed执行差异操作。
抱歉这段话这么长。希望能有所帮助...
根据您的问题风格,我会给您提供一个技术性(非商业性)的单句话:
AccuRev采用面向对象的方法来建模软件配置。这很简单,也很棒!特别是如果您正在建模工作流程,或者更好的是,设置持续交付(另一个话题)。但我见过太多人因为无法超越传统的“分支”(如cvs、svn、p4、cc等)而忽视了这种强大的技术和数据模型方法。最好的比喻是将一系列AccuRev流与clearcase中的配置规则进行比较...(注意:这只是一个比喻),但流比规则更强大,因为它们是维护基于时间的配置和历史记录的一级实体。
理解AccuRev的诀窍在于,虽然任何给定的“流”代表一个完整的配置(即您可以检出它),但该流的实际内容是通过聚合任何本地文件/目录更改、来自父级的任何更改以及一直向上到顶部收集其他文件的树来动态确定的。因此,每当您看到一组“流”的“树”时,它们不是分支...而是基于继承的一系列配置,其中顶级流就像“超类”,所有[子]子类都是[子]子类。新的文件/目录更改随着从开发、集成、QA等方面的推进而向上提升。希望对你有所帮助_dave