gpt4 book ai didi

version-control - 如何恢复 CVS 中的重大变化?

转载 作者:行者123 更新时间:2023-12-03 10:00:55 25 4
gpt4 key购买 nike

我的一位同事完全弄乱了我们主要 CVS 存储库中目录的内容。我只需要将整个模块恢复到去年底的状态即可。请问执行此操作的 CVS 命令是什么?

他已经添加和删除了数百个文件,因此简单的“从旧的 checkout 和提交中复制文件”是不够的。

我有 RTFM 和 STFW,我试过这个:

cvs co modulename  # Note no -P option
cvs up -jHEAD -jMAIN:2008-12-30 modulename

但这不起作用 - 他创建的新文件被删除,但旧文件和目录不会复活。 (我没有犯)。

我可能可以为此编写一个 shell 脚本,但这个功能肯定已经在 CVS 中了吗?

更新:一些澄清:
  • 我可以在特定日期对模块进行本地结帐。问题是如何将其恢复到 CVS 中。
  • 我确实有备份,但是使用像 CVS 这样的修订控制系统的重点是它应该很容易获得任何历史状态。下次发生这种情况时,我可能没有足够的运气进行备份(例如,每天都有备份,所以我可能会失去一天的工作)。
  • 我知道 CVS 已经过时了,我们应该转向更新的东西。但是在拥有大量基于 CVS 的工具(检查和构建脚本、每晚构建服务器等)的大型团队中,这种移动的时间成本是相当可观的。 (评估、更新脚本、测试、迁移、培训、浪费开发人员时间、同时维护两个系统,因为旧分支仍然需要 CVS)。因此,这必须由管理层计划和安排。

  • 更新#2:我要开始赏金了。 要获得赏金资格,您必须解释如何使用普通 CVS 命令恢复,而不是使用 hacky shell 脚本。

    更新 #3:服务器是 CVS 1.12.13 .访问是通过 pserver。我可以在 Linux PC 上使用相同版本的 CVS,或者 CVSNT 2.0.51d Windows 上的客户端。

    最佳答案

    实际上,您最初的方法非常接近解决方案。问题是,基于日期的加入不能正确处理删除的文件和目录。您需要先为要加入的代码库设置一个标签:

    mkdir code_base1 && cd code_base1
    cvs co -D "2008-12-30" modulename
    cvs tag code_base_2008_12_30

    现在进行基于标签的连接,减去从现在到 2008-12-30 之间的所有更改:
    cd .. && mkdir code_base2 && cd code_base2
    cvs co modulename
    cvs update -d -j HEAD -j code_base_2008_12_30 # use -d to resurrect deleted directories

    比较code_base1 和code_base2 的内容。除了 CVS 元信息之外,它们应该是相同的。最后将 2008 年 12 月 30 日的代码作为新的 HEAD 提交:
    cvs commit -m "Revert all changes this year"

    请注意,像这样标记您希望加入的代码将不起作用,因为 rtag 在使用 -D 时也无法正确处理已删除的文件和目录:
    cvs rtag -D "2008-12-30" code_base_2008_12_30 modulename

    关于version-control - 如何恢复 CVS 中的重大变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435368/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com