web-dev-qa-db-fra.com

Comment restaurer un fichier supprimé dans CVS?

J'ai supprimé un fichier archivé de la branche CVS, à savoir:

cvs remove -f file.txt
cvs commit

Comment restaurer le fichier?

38
Harry

Je crois que:

cvs add file.txt
cvs commit file.txt

... le ressuscitera du grenier.

38
Jason Etheridge

J'ai constaté que vous ne pouvez pas utiliser cvs add pour annuler une opération cvs remove qui a déjà été validée. Donc ça marche:

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

mais ça ne marche pas:

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

La méthode la plus simple que j'ai trouvée jusqu'à présent consiste à exécuter cvs status file.txt pour connaître le numéro de révision. Puis récupérez le contenu de la révision et rajoutez-le dans:

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

Le cvs add ne fonctionnait pas pour moi car ma version de cvs sur le serveur était très ancienne. J'ai confirmé que cela fonctionne bien avec CVS ​​version 1.11.22.

4
Harry

Essayer:

cvs add file.txt
cvs update file.txt
cvs commit file.txt
4
vvkatwss vvkatwss

Compte tenu du peu de succès de Harry, voici une transcription de ce que j'ai fait pour démontrer que la réponse ci-dessus fonctionne (excuses à l'avance pour sa longueur):

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

Il fait clairement la bonne chose, mais le comportement qu'il observe est différent. Peut-être y a-t-il une différence due à la version de CVS (j'utilise 1.11.22 sous Windows).

3
Jason Etheridge

cd dans le répertoire $ CVSROOT et le répertoire du module approprié, puis dans Attic, modifiez le fichier fileOfInterest, v et modifiez la ligne indiquant Dead; à Exp; puis déplacez fileOfInterest, v dans le répertoire ci-dessus.

Une mise à jour dans le module extrait va maintenant restaurer le fichier.

3
Andy Page

Le moyen le plus simple, mais le moins élégant, de le faire est de "cd" dans le répertoire CVS au même endroit que le fichier supprimé.

Puis éditez le fichier appelé "Entrées".

Recherchez la ligne représentant votre fichier supprimé. Notez qu'il y a un '-' après le /

Retirez le '-', sauvegardez le fichier et le tour est joué!

Beurk, mais ça marche.

1
PKCLsoft

Voici ce que je fais. Je viens de créer un fichier vide du même nom, puis de l'ajouter et de le valider, puis de récupérer l'ancienne version et de la ré-engager.

0
Mike Glasspool