如何通过命令行从CVS获取新添加文件的特定修订版?

时间:2008-10-10 05:35:54

标签: version-control command-line cvs

我们的一个内部编写工具提供了以下形式的cvs提交跟踪:

Checking in src/com/package/AFile.java;
    /home/cvs/src/com/package/AFile.java,v <-- Afile.java
    new revision: 1.1.2.56; previous revision: 1.1.2.55
    done

然后,该工具通过在已经签出特定代码分支的工作目录中发出cvs update -r 1.1.2.56命令从cvs获取文件。

如果工作目录中存在 AFile.java 的现有版本,则此命令可正常工作。但是当我们获得工作目录中没有版本的文件的跟踪时,该命令无法获取该文件。

有办法吗?

5 个答案:

答案 0 :(得分:22)

目前尚不清楚您的最终目标是什么:将整个存储库置于所需状态(选择所选分支的修订版)或从存储库中获取单个文件以进行进一步处理。我认为是后者。

然后,你需要这个命令:

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext

这将转储到指定文件(或文件)的stdout指定版本,可以将其重定向到临时位置并进行处理。

或者您可以使用:

cvs export -r <revision> -d ~/tmp module/filename.ext

,它会将(部分)存储库导出到指定的目标目录。

答案 1 :(得分:2)

cvs --help

告诉您可以使用-H arg查看特定CVS命令的帮助,如下所示:

$ cvs -H checkout
Usage:
  cvs checkout [-ANPRcflnps] [-r rev] [-D date] [-d dir]
    [-j rev1] [-j rev2] [-k kopt] modules...
        -A      Reset any sticky tags/date/kopts.
        -N      Don't shorten module paths if -d specified.
        -P      Prune empty directories.
        -R      Process directories recursively.
        -c      "cat" the module database.
        -f      Force a head revision match if tag/date not found.
        -l      Local directory only, not recursive
        -n      Do not run module program (if any).
        -p      Check out files to standard output (avoids stickiness).
        -s      Like -c, but include module status.
        -r rev  Check out revision or tag. (implies -P) (is sticky)
        -D date Check out revisions as of date. (implies -P) (is sticky)
        -d dir  Check out into dir instead of module name.
        -k kopt Use RCS kopt -k option on checkout. (is sticky)
        -j rev  Merge in changes made between current revision and rev.
(Specify the --help global option for a list of other help options)

......教一个人如何钓鱼......:)

答案 2 :(得分:2)

我试过以下方式

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext

它给出了错误,如

cvs checkout: cannot find module `filename.ext` -ignored.

所以我按照以下方式完成了

cvs checkout -r <revision> -p Module_name/path_to_file/filename.ext > ~/tmp/filename.ext

现在它工作正常。

答案 3 :(得分:1)

一种解决方案是更改工具以为文件发出“cvs co”,指定现在使用更新的修订版本。 checkout命令必须从树的顶部完成,而不是在包含该文件的目录中完成。我遇到过类似的情况,更新无法找到新文件,需要按照我的描述签出文件。

答案 4 :(得分:1)

这是唯一对我有用的方法,因为checkout命令总是会找不到&#34;模块&#34;错误:

1::2::3::Nil match {
  case List(1, _, _*) => "Starts with 1. More than one element"
  case List(1) => "Starts with 1. Only one element"
}

似乎cvs放弃了这个球。

相关问题