如何在CVS中获取文件特定修订版的先前版本

时间:2011-05-25 11:21:57

标签: version-control cvs

在给定文件名及其修订版的情况下,是否有任何CVS命令可以为我提供文件的先前版本?

3 个答案:

答案 0 :(得分:2)

您可以使用cvs history command

答案 1 :(得分:1)

CVS控制文件版本的方式是只有在该文件中有提交时才会增加修订。树或标记等中的更改不会影响单个文件的修订。

虽然没有明确的方法来获取文件的先前修订版,但是给出了名称及其修订版......但是有一个命中和试用方法。盲目地转到以前的修订版。例如,Rev 1.5的上一版本将是Rev 1.4

另一种解决方法是编写shell脚本。使用cvs log获取特定文件名的更改日志并grep所需的修订号。

答案 2 :(得分:0)

没有直接的方法可以从CVS命令执行此操作。但是因为我正在使用输出(CVS日志)IN java,所以下面的代码片段为我工作

if (currentRevision == null || currentRevision.trim().length() == 0) {
    return null;
}

String[] revComponents = currentRevision.trim().split("\\.");

if (revComponents == null || revComponents.length == 0) {
    log.warn("Failed to parse revision number: " + currentRevision
            + " for identification of previous revision");
    return null;
}

if (revComponents.length % 2 == 1) {
    log.warn("Odd number of components in revision: " + currentRevision);
    log.warn("Possibly a tag revision.");
    return null;
}

int lastComp;
try {
    lastComp = Integer.parseInt(revComponents[revComponents.length - 1]);
} catch (NumberFormatException nmfe) {
    log.warn("Failed to parse the last component of revision from " + currentRevision);
    log.warn("Identified presence of alphanumric values in the last component. Cannot predict previous revision for this");
    return null;
}

if (revComponents.length == 2 && lastComp == 1) {
    log.debug("Revision: " + currentRevision + " is the first revision for the current file. Cannot go further back");
    return null;
}

StringBuilder result = new StringBuilder();
if (lastComp == 1) {
    for (int i = 0; i < revComponents.length - 2; i++) {
        if (result.length() > 0)
            result.append('.');
        result.append(revComponents[i]);
    }
} else if (lastComp > 1) {
    for (int i = 0; i < revComponents.length - 1; i++) {
        result.append(revComponents[i]);
        result.append('.');
    }
    result.append((lastComp - 1));
} else {
    log.warn("Found invalid value for last revision number component in " + currentRevision);
        return null;
    }

    return result.toString();
}

上面的代码也处理分支修订,例如,如果当前修订版(图片中)是分支上的第一个修订版,它将返回从该文件的分支创建的修订版。

希望这有帮助。