由于遗留原因,我在项目中使用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您现在可以正常进行检出,编辑和提交文件.
这不会以递归方式处理许多文件,但希望有所帮助.
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存储库导入更现代的东西.
使用两个 -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)
这是命令。
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将没有差异。