Déplacer un fichier dans CVS sans réinitialiser le numéro de révision
-
02-07-2019 - |
Question
Dernièrement, j'ai déplacé des fichiers source dans notre arborescence. Par exemple, placer un groupe de fichiers dans un assemblage commun. Je supprime le fichier de CVS, puis je l'ajoute à nouveau au nouvel emplacement. Le problème est que le numéro de révision du fichier a été réinitialisé à 1.1. Existe-t-il un moyen simple de déplacer des objets sans réinitialiser le numéro?
J'aurais probablement dû mentionner que je n'ai pas accès au référentiel, donc tout ce qui l'exige ne m'aide pas, mais pourrait en aider d'autres.
La solution
Il n’existe aucun moyen de déplacer des fichiers avec des commandes réservées aux clients. Vous devez accéder au système de fichiers du serveur et pouvez déplacer le fichier ", v " fichier dans le référentiel vers un nouvel emplacement. Cela gardera tout l'historique, puisque CVS enregistre chaque révision et ses commentaires dans ce fichier.
N'oubliez pas que les fichiers sont déplacés dans un dossier "Attic". sous-dossier (qui ne peut pas être vu du client) quand ils sont supprimés. C’est ainsi que les fichiers peuvent être restaurés après leur suppression.
En règle générale, cette approche ne pose pas de problème immédiat. Toutefois, vous devez envisager les conséquences si vous décidez de télécharger une version antérieure de votre produit qui pourrait s’appuyer sur la structure de répertoires précédente!
C’est là que les autres systèmes de contrôle de révision, comme Subversion, ont un avantage décisif.
Autres conseils
La manière généralement acceptée d’atteindre cet effet consiste à effectuer les étapes suivantes. Le terme technique utilisé est une repocopie.
- Connectez-vous au serveur hébergeant le référentiel CVS et copiez (ne déplacez pas) le fichier de référentiel de l'emplacement de votre choix vers le nouvel emplacement.
- Du côté client, cvs supprime le fichier de l'ancien emplacement.
- côté client, cvs met à jour le contenu du répertoire dans le nouvel emplacement (pour que le fichier y apparaisse).
- Du côté client, effectuez une validation forcée de cvs (à l'aide de l'indicateur -f) du fichier copié pour consigner le fait qu'il a été repocopié (ajoutez un commentaire de journal à cet effet).
Cette procédure conserve l'historique du fichier dans son nouvel emplacement et ne rompt pas non plus la continuité en arrière du référentiel. Si vous remontez dans le temps, le fichier apparaîtra correctement à son ancien emplacement. Vous pouvez également utiliser la même procédure pour renommer un fichier.
Le le manuel CVS en ligne contient des informations détaillées sur la procédure à suivre. ceci:
La manière habituelle de déplacer un fichier consiste à émettre une commande cvs rename.
$ cvs renommer l'ancien nouveau
$ cvs commit -m "quotient ancien en nouveau"C’est le moyen le plus simple de déplacer un fichier. Il n’est pas sujet aux erreurs et conserve l’historique de ce qui a été fait. Les clients CVSNT peuvent récupérer le nom d'origine en extrayant une ancienne version du référentiel.
Cette fonctionnalité n'est prise en charge que sur les serveurs CVSNT 2.0.55 et ultérieurs.
Eh bien, le moyen le plus simple serait d’accéder au serveur CVS où se trouve votre dépôt et de déplacer simplement vos dossiers / fichiers avec mv (en supposant une machine * nix). Ainsi, l'historique du fichier sera conservé.
N’est-ce pas l’un des défauts connus de CVS: pas de mécanisme intégré pour déplacer des fichiers? Cela fait longtemps que je ne l’utilise pas, alors peut-être qu’il ya maintenant une solution.
Subversion vous permettra de déplacer des fichiers, mais cela fera également l'objet d'un suivi afin que le nouveau fichier reçoive le numéro de révision le plus récent.
Il semble conserver l'historique des versions que vous devez utiliser l'option -v lors du déplacement, voir ci-dessous
Le renommage de fichiers par CVS est fastidieux. Au point de vue du référentiel, vous peut simplement supprimer des fichiers ou en ajouter de nouveaux. Donc, le processus habituel est
mv oldfile.c newfile.c cvs delete oldfile.c cvs ajouter newfile.c
Cela fonctionne, mais vous perdez tous les changer les informations que vous avez écrit en commettre des opérations au cours des années de développement difficile et qui est probablement pas ce que tu veux. Mais il y a un moyen; vous devez avoir un accès direct au dépôt. D'abord, allez là-bas, trouvez le répertoire où votre projet est et fait les suivantes:
cp oldfile.c, v newfile.c, v
maintenant allez dans votre répertoire de travail et faire une mise à jour de cvs; newfile.c sera apparaître comme un nouveau fichier. Maintenant vous pouvez cvs supprimez oldfile.c et commettez.