8

我们内部编写的工具之一提供了一个 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的现有版本,则此命令可以正常工作。但是当我们在工作目录中找到一个没有版本的文件时,该命令无法获取该文件。

有没有办法做到这一点?

4

5 回答 5

25

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

然后,你需要这个命令:

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

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

或者你可以使用:

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

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

于 2008-10-10T06:21:19.397 回答
3

cvs --help

告诉您可以使用-Harg 来查看特定 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)

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

于 2013-04-22T15:19:54.143 回答
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

现在它工作得很好。

于 2015-12-03T09:58:54.437 回答
1

一种解决方案是更改工具以发布文件的“cvs co”,指定修订版,就像现在的更新一样。checkout 命令必须从树的顶部完成,而不是在包含文件的目录中。我遇到过类似的情况,更新无法找到新文件,需要检查文件,正如我所描述的那样。

于 2008-10-10T06:07:18.833 回答
1

这是对我有用的唯一方法,因为 checkout 命令总是给出“找不到模块”错误:

cvs diff -r <revision> <file> > /tmp/patch
cp <file> /tmp
cd /tmp
patch -R < patch

似乎 cvs 在这件事上丢了球。

于 2017-03-15T15:49:01.857 回答