J'ai supprimé un fichier archivé de la branche CVS, à savoir:
cvs remove -f file.txt
cvs commit
Comment restaurer le fichier?
Je crois que:
cvs add file.txt
cvs commit file.txt
... le ressuscitera du grenier.
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
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.
Essayer:
cvs add file.txt
cvs update file.txt
cvs commit file.txt
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).
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.
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.
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.