如何恢复到CVS中的先前提交

Fio*_*a T 33 legacy cvs

由于遗留原因,我在项目中使用CVS.最近我做了一些改变,破坏了我们的代码,我需要将它们还原.什么是CVS的模拟git revert -r <old_revision>

查看过去的问题,例如如何还原大变更,CVS提交不会对已更改的文件进行分组.是使用日期还原的唯一方法吗?

此外,查看过去更改的最佳方式是什么?CVS日志输出太多信息,其中大部分都是不必要的.我想看到提交消息和更改的文件.

Dav*_*e M 18

可以在此处找到CVS文档,但是从该站点可以了解如何还原单个文件:

使旧版本成为当前版本

将"oldfile"的版本保存到其他内容并查看"当前"版本.
注意:您仍然必须执行更新-A以获取当前版本,因为即使您已重命名
"oldfile",该标记仍与文件"oldfile"关联,并且在> update -A完成之前不会被删除.

然后将"旧"版本重命名为"当前"版本.
%mv oldfile oldfile.old.ver
%cvs update -A oldfile
%mv oldfile.old.ver oldfile
%cvs commit -m" reverting to version 1.5"oldfile

您现在可以正常进行检出,编辑和提交文件.

这不会以递归方式处理许多文件,但希望有所帮助.

  • 嗨,戴夫,谢谢你的回答.我最终使用cvs update -j <current rev> -j <old rev> <filename>来恢复,你知道这些方法有什么区别吗? (7认同)

Kei*_*son 10

要退出单个文件的修订版,请使用cvs admin -o.

有关info cvs详细信息,请参阅CVS文档(如果您使用的是类Unix系统),或者查看此链接.

引自手册:

`-oRANGE'
     Deletes ("outdates") the revisions given by RANGE.

     Note that this command can be quite dangerous unless you know
     _exactly_ what you are doing (for example see the warnings below
     about how the REV1:REV2 syntax is confusing).

     If you are short on disc this option might help you.  But think
     twice before using it--there is no way short of restoring the
     latest backup to undo this command!  If you delete different
     revisions than you planned, either due to carelessness or (heaven
     forbid) a CVS bug, there is no opportunity to correct the error
     before the revisions are deleted.  It probably would be a good
     idea to experiment on a copy of the repository first.
Run Code Online (Sandbox Code Playgroud)

然后,它提供了许多方法来指定要删除的修订版本或一系列修订版本.

正如它所说,这可能非常危险; 它会从存储库中删除信息,这通常是任何修订控制系统试图阻止的信息.

如果您不需要像这样更改历史记录,只需获取旧版本的副本并在错误修订版本的基础上进行检查,如Dave M的回答所示.

你是对的,CVS的重点是个人档案; 更现代的系统倾向于强调整个存储库的状态.

到目前为止,所有这些只允许您一次处理一个文件.

但是你可以将指定日期的整个模块检出到一个单独的目录(cvs checkout -D date)中,然后将文件复制到模块的当前副本上,并检查所有内容.如果你这样做,一定要做一个"cvs diff" "所以你确切地知道你正在做出什么改变.

我不知道获得更简洁的日志信息的好方法. cvs log没有参数为您提供每个文件的日志,而不是按时间顺序. cvs log filename为您提供指定文件的日志,但不会将其与可能同时修改的其他文件相关联.就个人而言,我可能会考虑编写一个Perl脚本来收集打印的信息cvs log并重新排列以供显示,但这可能比你感兴趣的工作更多.

有一些工具可以将CVS存储库导入更现代的东西.


Vij*_*tty 6

使用两个 -j 选项,CVS 将合并两个各自修订版之间的更改。

例子:

如果文件 @file{foo.c} 基于修订版 1.6 并且您想要删除 1.3 和 1.5 之间所做的更改,您可以这样做:

$ cvs update -j1.5 -j1.3 foo.c   # note the order...
Run Code Online (Sandbox Code Playgroud)


Jee*_*tel 5

这是命令。

1)发生错误的提交

2)检查其最新版本。

cvs log file.txt
Run Code Online (Sandbox Code Playgroud)

可以说1.25是最新版本,原因是提交错误,所以我们想恢复到较早的版本1.24。

3)因此,让我们按照以下方式进行。

cvs update -r 1.24 file.txt // checkout older version
cp file.txt old.txt // create backup
cvs update -A file.txt // again move to latest one
cp old.txt file.txt // replace old to at latest one.
cvs status file.txt // It will shows as locally modified.
cvs commit -m "Reverting false commit"  file.txt
cvs log file.txt // new 1.26 will be created.
Run Code Online (Sandbox Code Playgroud)

4)只是确保让diff的1.26和1.24是相同的。

cvs diff -r 1.26 -r 1.24 file.txt 
Run Code Online (Sandbox Code Playgroud)

如果以上所有步骤均正确,则diff将没有差异。