我想知道我是否可以标记特定版本。我想在我的项目中使用 JCR,我们有许多由不同类型的节点组成的分层类型树,我们需要在进行一系列更改后保存一个版本以进行暂存或生产。我想知道如何标记特定版本,以便保存对特定节点及其子节点所做的所有更改。
谢谢!!!
我想知道我是否可以标记特定版本。我想在我的项目中使用 JCR,我们有许多由不同类型的节点组成的分层类型树,我们需要在进行一系列更改后保存一个版本以进行暂存或生产。我想知道如何标记特定版本,以便保存对特定节点及其子节点所做的所有更改。
谢谢!!!
是的,您可以使用您选择的字符串标记版本历史记录中的版本。但 JCR 2.0 称它们为“标签”。
首先,您需要找到VersionHistory
已签入的特定节点:
String path = ... // the path to the versioned node
VersionManager versionManager = session.getWorkspace().getVersionManager();
VersionHistory history = versionManager.getVersionHistory(path);
然后,您可以Version
通过遍历所有版本、获取“根版本”或获取基本版本来找到要标记的特定内容。我不会展示这个,因为有很多方法可以做到这一点。
// Find the version ...
Version versionToBeLabeled = ...
然后你可以给这个版本添加一个标签。请注意,标签只能在单个节点的版本历史记录中使用一次,因此在添加标签时,您可以选择是移动现有标签(如果有的话)还是抛出异常。如果它已经被使用,下面是移动它的代码:
// Add a user-defined label to this version ...
String versionName = versionToBeLabeled.getName();
String versionLabel = "MyLabel";
boolean moveLabel = true;
VersionHistory.addVersionLabel(versionName, versionLabel, moveLabel);
请注意,版本名称由 JCR 实现确定,而标签是用户定义的。这就是为什么添加自己的标签然后Version
通过标签而不是通过某些实现确定的名称查找特定实例通常非常方便的原因:
Version foundVersion = versionHistory.getVersionByLabel(versionLabel);
当然,您可以找出Version
历史中是否有任何带有特定标签的内容:
if ( versionHistory.hasVersionLabel(versionLabel) ) {
// do something
}
或者如果特定版本有标签:
Version version = ...
if ( versionHistory.hasVersionLabel(version,versionLabel) {
// do something
}
甚至删除特定标签:
versionHistory.removeLabel(versionLabel);
有关详细信息,请参阅JCR 2.0 (JSR-283) 规范的第 15.4 节。