Question

I've removed a checked in file from the CVS branch, i.e.:

cvs remove -f file.txt
cvs commit

How do I restore the file?

Was it helpful?

Solution

I believe that:

cvs add file.txt
cvs commit file.txt

... will resurrect it from the attic.

OTHER TIPS

I've found that you can not use cvs add to undo a cvs remove operation that has already been comitted. So this works:

$ cvs remove -f file.txt
$ cvs add file.txt

but this doesn't work:

$ cvs remove -f file.txt
$ cvs commit
$ cvs add file.txt

The simplest method I've found so far is to run cvs status file.txt to find out the revision number. Then grab the contents of the revision and add it back in:

$ cvs update -p -r rev file.txt > file.txt
$ cvs add file.txt
$ cvs commit

The cvs add did not work for me because my cvs version on the server was very old. I have confirmed that it works fine with CVS version 1.11.22.

Try:

cvs add file.txt
cvs update file.txt
cvs commit file.txt

Given Harry's lack of success, here's a transcript of what I did to demonstrate that the above answer works (apologies in advance for its length):

C:\foo>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 344F-1517

 Directory of C:\foo

28/09/2008  05:12 PM    <DIR>          .
28/09/2008  05:12 PM    <DIR>          ..
28/09/2008  05:12 PM    <DIR>          CVS
28/09/2008  05:11 PM                19 file.txt
               1 File(s)             19 bytes
               3 Dir(s)  22,686,416,896 bytes free

C:\foo>cvs status file.txt
===================================================================
File: file.txt          Status: Up-to-date

   Working revision:    1.2     Sun Sep 28 07:11:58 2008
   Repository revision: 1.2     C:\jason\CVSROOT/foo/file.txt,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)


C:\foo>cvs rm -f file.txt
cvs remove: scheduling `file.txt' for removal
cvs remove: use 'cvs commit' to remove this file permanently

C:\foo>cvs commit -m "" file.txt
Removing file.txt;
C:\jason\CVSROOT/foo/file.txt,v  <--  file.txt
new revision: delete; previous revision: 1.2
done

C:\foo>cvs status file.txt
===================================================================
File: no file file.txt          Status: Up-to-date

   Working revision:    No entry for file.txt
   Repository revision: 1.3     C:\jason\CVSROOT/foo/Attic/file.txt,v

C:\foo>more file.txt
Cannot access file C:\foo\file.txt

C:\foo>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 344F-1517

 Directory of C:\foo

28/09/2008  05:12 PM    <DIR>          .
28/09/2008  05:12 PM    <DIR>          ..
28/09/2008  05:12 PM    <DIR>          CVS
               0 File(s)              0 bytes
               3 Dir(s)  22,686,400,512 bytes free

C:\foo>cvs add file.txt
cvs add: Resurrecting file `file.txt' from revision 1.2.
U file.txt
cvs add: Re-adding file `file.txt' (in place of dead revision 1.3).
cvs add: use 'cvs commit' to add this file permanently

C:\foo>cvs commit -m "" file.txt
Checking in file.txt;
C:\jason\CVSROOT/foo/file.txt,v  <--  file.txt
new revision: 1.4; previous revision: 1.3
done

C:\foo>more file.txt
This is a test...

C:\jason\work\dev1\nrta\foo>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 344F-1517

 Directory of C:\jason\foo

28/09/2008  05:15 PM    <DIR>          .
28/09/2008  05:15 PM    <DIR>          ..
28/09/2008  05:13 PM    <DIR>          CVS
28/09/2008  05:13 PM                19 file.txt
               1 File(s)             19 bytes
               3 Dir(s)  22,686,375,936 bytes free

Clearly he's doing the right thing, but the behaviour he's observing is different. Perhaps there's a difference due to CVS version (I'm using 1.11.22 on Windows).

cd into $CVSROOT directory and the relevant module directory and then the Attic, edit the fileOfInterest,v and change the line that says Dead; to Exp; and then move the fileOfInterest,v to the directory above.

An update in the checked out module will now restore the file.

The simplest, though possible least elegant way to do this is to 'cd' into the CVS directory in the same place as the removed file.

Then edit the file called "Entries".

Find the line representing your removed file. Note that there is a '-' after the /

Remove the '-', save the file and voila!

Yuck, but it works.

Here's what I do. I just create an empty file of the same name, then add and commit it, then retrieve the older version and re-commit that.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top