Question

Quoi, quelqu'un dans mon équipe a fait une "erreur" pour supprimer plusieurs fichiers dans la révision actuelle du référentiel d'équipe. Est possible de mettre à jour la version locale actuelle à la révision de la tête? Lorsque je clique sur Commit, Subclipse ne reconnaît pas les fichiers manquants pour les télécharger.

Merci d'avance,
rayt

Était-ce utile?

La solution

Oh, pour l'amour de Pete! Jusqu'à présent, les réponses ont été - au mieux - trompeuses.

D'après votre question, il semble que vous essayiez quelque chose comme ceci:

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"

Sauf que cela ne fonctionnera pas. Il n'y a aucune modification à commettre. Vous pouvez mettre à jour les anciennes révisions, mais vous ne pouvez pas y apporter de modifications. Vous ne pouvez pas changer le passé. Vous ne pouvez commettre qu'une nouvelle révision, annulant les dégâts.

Ok, supposons que votre référentiel est au SVN: // Repo. Ici, un exemple simplifié dans lequel le coffre de dossier contient deux fichiers, "A" et "B". Appelons cette révision 8 (R8).

trunk    # working copy of svn://repo/trunk
    a
    b

Jr Hacker, glisse et supprime accidentellement B:

svn rm b
svn commit -m "oops"

Appelons la validation qui en résulte R9.

Donc, la prochaine fois que vous mettez à jour à partir du référentiel,

svn update

trunk
    a

B disparaît! Panique? Non. Il s'agit d'un système de contrôle de version. Tout ce qui a été enregistré peut être restauré. Voici deux possibilités:

Juste copie Le fichier d'une révision plus ancienne, c'est-à-dire la dernière révision où elle existait encore: 8.

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

La solution la plus générale consiste à utiliser un fusionner. Vous pouvez utiliser cette technique pour annuler plus qu'une simple suppression parasite.

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"

La façon de lire cette fusion est:

Déterminez d'abord les changements à apporter pour passer de R9 (arrière) à R8 du dossier du référentiel (svn: // repo / trunk) associé au répertoire actuel (le premier "."). Maintenant, effectuez ces modifications sur la copie de travail dans le répertoire actuel (le second ".").

Il y a une syntaxe plus pratique si vous restez simplement un seul changement:

svn merge -c-8  . . #note the minus sign before the 8

Si vous n'utilisez pas SVN à partir de la ligne de commande, passez un peu autour de votre outil, vous êtes sûr de trouver quelque chose. TortoiseSVN, par exemple, a les «modifications de retour de cette révision» pratiques lorsque vous ouvrez un journal à partir d'une copie de travail.

Autres conseils

Prenez une copie des fichiers supprimés dans votre révision quelque part (par exemple, un dossier temporaire sur votre bureau), puis met à jour (qui supprimera les fichiers d'origine, selon l'action de suppression engagée de votre collègue), puis retirez vos copies et les engager dans SVN.

Je ferais ce qui suit:

Trouvez le numéro de révision avant la suppression ... Faites un svnadmin Dump -R1: [GOODREVISIONNUMBER ICI]> file.dump.

Ensuite, créez un nouveau référentiel, "Svnadmin Create [Nom du référentiel], puis chargez le vidage dans le nouveau référentiel. "Svnadmin Load [newRepositoryName] <file.dump.

Ensuite, consultez cette révision et copiez les fichiers de l'ancien paiement dans le nouveau et engagez-vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top