How do I restore a deleted file in CVS?
Asked Answered
L

8

43

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?

Latticed answered 27/9, 2008 at 22:55 Comment(0)
R
44

I believe that:

cvs add file.txt
cvs commit file.txt

... will resurrect it from the attic.

Reinforcement answered 27/9, 2008 at 22:56 Comment(0)
L
25

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
Latticed answered 28/9, 2008 at 6:50 Comment(1)
Forgot what the last revision of the file was? cvs log [FILENAME]Adkisson
L
4

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.

Latticed answered 28/9, 2008 at 8:10 Comment(1)
I'm glad we got to the bottom of that, Harry. I was getting a little concerned. :-)Reinforcement
V
4

Try:

cvs add file.txt
cvs update file.txt
cvs commit file.txt
Verity answered 2/8, 2012 at 9:11 Comment(0)
S
4

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.

Susurrus answered 18/4, 2013 at 13:37 Comment(1)
If you are an admin and have access to the server where the file is stored... I don't think manipulating the files on the CVS server is a good idea unless you are forced to do this.Soemba
R
3

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).

Reinforcement answered 28/9, 2008 at 7:25 Comment(1)
Thanks Jason for taking your time to provide a detailed response.Latticed
D
1

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.

Delano answered 14/2, 2014 at 2:43 Comment(0)
H
0

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.

Hoffer answered 17/11, 2010 at 15:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.