Je travaille sur un projet avec un ami et je veux revenir à une ancienne version de notre code et la définir comme actuelle. Comment fait-on ça?
J'utilise "anksvn" sur vs08.
J'ai la version que je veux sur mon PC, mais la validation échoue; Le message que je reçois est «la validation a échoué, le fichier ou le répertoire est obsolète».
J'ai également le client subversion sur mon PC.
svn merge -r HEAD:140
.Vous ne pouvez valider de nouvelles modifications qu'en tête de l'historique de subversion.
La raison pour laquelle vous ne pouvez rien faire directement avec la bonne copie que vous avez sur votre PC, c'est que ses
.svn
dossiers savent qu'il s'agit de code du passé, donc nécessite une mise à jour avant tout commit.Trouver le bon numéro de révision et revenir
Recherchez le numéro de révision de l'ancienne copie souhaitée.
Obtenez votre révision actuelle avec:
Ou pour vérifier les anciennes versions de votre projet, utilisez:
jusqu'à ce que vous trouviez le bon numéro de révision.
Notez le bon numéro de révision (en supposant
123
pour les exemples ci-dessous).Mise à jour vers la dernière révision:
Annulez toutes les modifications entre la révision souhaitée et la dernière version:
(identique à la réponse de Jon Skeet ci-dessus.)
Si vous ne trouvez pas le numéro de révision
Si vous ne trouvez pas l'ancienne copie et que vous souhaitez simplement valider les fichiers actuellement sur votre PC:
Faites une copie de votre bonne version (mais sans aucun
.svn
dossier):Assurez-vous maintenant que vous disposez de la dernière version:
Copiez votre bonne version par-dessus la copie de travail.
Cette commande copiera et supprimera également tous les fichiers de l'arborescence de travail qui ne sont pas dans votre bonne copie, mais cela n'affectera pas les
.svn
dossiers existants .Si vous n'avez pas rsync, vous pouvez l'utiliser,
cp -a
mais vous devrez également supprimer manuellement tous les fichiers indésirables.Vous devriez pouvoir engager ce que vous avez maintenant.
la source
Utilisez simplement cette ligne
Vous pouvez connaître votre révision actuelle en utilisant:
la source
La manière standard d'utiliser la fusion pour annuler l'intégralité de l'enregistrement fonctionne très bien, si c'est ce que vous voulez faire. Parfois, cependant, tout ce que vous voulez faire est de restaurer un seul fichier. Il n'y a aucun moyen légitime de le faire, mais il y a un hack:
Utilisez la sous-commande d'exportation de svn:
exportation svn http: // url-to-your-file @ 123 / tmp / filename
(Où 123 est le numéro de révision d'une bonne version du fichier.) Ensuite, déplacez ou copiez ce seul fichier pour écraser l'ancien. Archivez le fichier modifié et vous avez terminé.
la source
svn
également?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Un peu plus old-school
puis l'habituel
la source
Je pense que cela convient le mieux:
Faites la fusion vers l'arrière, par exemple, si le code validé contient la révision de la révision 5612 à 5616, fusionnez-la simplement vers l'arrière. Cela fonctionne de mon côté.
Par exemple:
Il contiendrait un code fusionné à l'ancienne révision, alors vous pourriez le valider.
la source
C'est ce que j'ai fait et travaillé pour moi.
Je souhaite annuler les modifications apportées à plusieurs validations que j'ai effectuées pendant certaines périodes et je souhaite revenir au point de validation précédent.
Cela exécutera une fusion inverse, annulant les modifications dans votre copie de travail.
Examinez simplement le code et validez.
la source
Cliquez avec le bouton droit sur la hiérarchie la plus élevée que vous souhaitez rétablir >>
Revert
ouRevert to Revision
la source
La plupart des réponses précédentes utilisaient une fusion inversée, et c'est généralement la bonne réponse. Cependant, il y a une situation (qui vient de m'arriver) où ce n'est pas le cas.
J'ai accidentellement changé un fichier avec des fins de ligne Unix en fins de ligne DOS lors d'une petite modification et je l'ai validé. Ceci est facilement annulé, soit en changeant les fins de ligne et en recommençant, soit par une fusion inverse, mais cela a pour effet de faire de
svn blame
list my edit la source de chaque ligne du fichier. (Fait intéressant, TortoiseSVN sur Windows n'est pas affecté par cela; uniquement la ligne de commandesvn blame
.)Si vous souhaitez conserver l'historique tel que rapporté par
svn blame
, je pense que vous devez procéder comme suit:La suppression est un peu effrayante, mais n'oubliez pas que le fichier est toujours enregistré dans le référentiel, donc le restaurer n'est pas un problème. Voici du code pour illustrer les étapes. Supposons qu'il
xxx
s'agit du numéro de révision de la dernière bonne copie.Notez que pour une copie dans le référentiel, la destination doit être un répertoire, pas un nom de fichier.
la source
Cliquez avec le bouton droit sur le projet> Remplacer par> Révision ou URL> Sélectionnez la révision spécifique que vous souhaitez rétablir.
Maintenant, validez la version locale du code de mise à jour dans le référentiel. Cela ramènera la base de code à la révision spécifique.
la source
Il y a beaucoup de réponses dangereuses sur cette page. Notez que depuis SVN version 1.6, effectuer une mise à jour -r peut provoquer des conflits d'arborescence, qui dégénèrent rapidement en un cauchemar kafkeresque potentiellement perdant des données où vous recherchez des informations sur les conflits d'arborescence.
La bonne façon de revenir à une version est la suivante:
Où 12345 est le numéro de version. N'oubliez pas le point.
la source
Synchronisez avec l'ancienne version et validez-la. Cela devrait faire l'affaire.
Voici également une explication de l'annulation des modifications.
la source
La réponse de Jon Skeet est à peu près la solution en un mot, mais si vous êtes comme moi, vous voudrez peut-être une explication. Le manuel Subversion appelle cela un
Fusion de cerises
Depuis les pages de manuel.
Exemple:
Ceci remplacera la copie locale [2983] (qui, selon la citation ci-dessus, devrait être synchronisée avec le serveur - votre responsabilité) avec la révision 289 du serveur. Le changement se produit localement, ce qui signifie que si vous avez effectué un check-out net, les modifications peuvent être inspectées avant de les valider.
la source
Ce qui suit a fonctionné pour moi.
J'ai eu beaucoup de changements locaux et j'ai dû supprimer ceux de la copie locale et extraire la dernière version stable de SVN.
Vérifiez l'état de tous les fichiers, y compris les fichiers ignorés.
Grep toutes les lignes pour obtenir les fichiers nouvellement ajoutés et ignorés.
Remplacez-les par
//
.et rm -rf toutes les lignes.
état svn --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
la source