title: How do I revert a big change in CVS?
body: <p>One of my colleagues has totally messed up the contents of a directory in our main CVS repository.  I need to just revert the whole module to the state it was in at the end of last year.  What's the CVS command to do this please?</p>
  
  <p>He has added and removed hundreds of files, so a simple "copy over files from old checkout and commit" isn't enough.</p>
  
  <p>I have RTFM and STFW, and I tried this:</p>
  
  <pre><code>cvs co modulename  # Note no -P option
  cvs up -jHEAD -jMAIN:2008-12-30 modulename
  </code></pre>
  
  <p>But that doesn't work - the new files he created get removed, but the old files and directories don't get resurrected.  (I didn't commit it).</p>
  
  <p>I can probably write a shell script for this, but surely this functionality must be in CVS already?</p>
  
  <p>Update:  Some clarifications:</p>
  
  <ul>
  <li><p>I can get a <em>local checkout</em> of the module at a specific date.  The question is how to get that back into CVS.</p></li>
  <li><p>I do have backups, but the point using of a revision control system like CVS is that it's supposed to be easy to get any historical state.  Next time something like this happens I may not be lucky enough to have backups (e.g. backups are daily, so I may lose up to a day's work).</p></li>
  <li><p>I know that CVS is old, and we should move to something newer.  But in a large team with a large number of CVS-based tools (checkout &amp; build scripts, nightly build server, etc) the time cost of such a move is considerable.  (Evaluation, updating scripts, testing, migration, training, lost developer time, maintaining both systems in parallel as CVS would still be needed for old branches).  Hence this has to be planned &amp; scheduled by management.</p></li>
  </ul>
  
  <p>Update #2: I'm going to start a bounty on this.  <strong>To qualify for the bounty you have to explain how to revert using normal CVS commands, not with a hacky shell script.</strong></p>
  
  <p>Update #3: The server is <a href="http://www.nongnu.org/cvs/" rel="noreferrer">CVS 1.12.13</a>.  Access is via pserver.  I can use the same version of CVS on a Linux PC, or the <a href="http://en.wikipedia.org/wiki/CVSNT" rel="noreferrer">CVSNT 2.0.51d</a> client on Windows.</p>