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

Version control 如何通过命令行从CVS获取新添加文件的特定版本?,version-control,command-line,cvs,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 签入src/com/package/AFile.java; /home/cvs/src/com/package

我们内部编写的一个工具提供了以下形式的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
签入src/com/package/AFile.java;

/home/cvs/src/com/package/AFile.java,v一个解决方案是更改工具,为文件发出一个“cvs co”,并在更新中指定当前的版本。签出命令必须从树的顶部执行,而不是在包含文件的目录中。我遇到过类似的情况,更新无法找到新文件,需要如我所述签出该文件。

不清楚您的最终目标是什么:使整个存储库进入所需状态(choosen分支的choosen修订版),还是从存储库中获取单个文件以供进一步处理。我想是后者吧

然后,您需要以下命令:

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext
cvs签出-r-p filename.ext>~/tmp/filename.ext
这将转储到指定文件(或多个文件)的标准输出指定版本,这些文件可以重定向到临时位置并进行处理

或者您可以使用:

cvs export -r <revision> -d ~/tmp module/filename.ext
cvs export-r-d~/tmp module/filename.ext
,它将(部分)存储库导出到指定的目标目录。

cvs--help

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

。。。教一个人如何钓鱼……:)

我试过以下方法

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext
cvs checkout -r <revision> -p Module_name/path_to_file/filename.ext > ~/tmp/filename.ext
所以我按以下方法做了

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext
cvs checkout -r <revision> -p Module_name/path_to_file/filename.ext > ~/tmp/filename.ext
cvs签出-r-p模块\u name/path\u到\u file/filename.ext>~/tmp/filename.ext

现在,它工作正常。

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

cvs diff-r>/tmp/patch
cp/tmp
cd/tmp
patch-R

看来cvs在这方面失算了。

谢谢。我在发帖后立即尝试了一下,效果很好。谢谢。我将使用cvs co-r/module/path/to/file.txt而不使用-p选项如果您不使用-p选项,它将设置粘性标志,因此所有fugure签出都将使用旧版本。签出命令对我不起作用:它对我指定的文件显示“未找到模块”。感谢您的提示:p此问题是在2008年10月10日提出的。从那时起,大量的水从桥下流过:)同意,但烟囱溢流对许多人来说是一种资源。我在谷歌上搜索发现了这个问题。这是有帮助的,但它没有解释-p的作用,也没有解释其他可用选项。我希望这个答案能帮助其他人。当做虽然最好是编辑现有答案并添加解释。是的,我也有这个错误。我不知道我的模块名是什么。我相信我能弄明白,但仅仅为了检查一个文件的旧版本而这样做似乎很可笑。请参阅我的解决方案,它不需要计算模块名称。