2009-12-11 4 views
12

J'ai besoin de quelques précisions sur le comportement de "svn switch". J'utilise SVN version 1.6.5. A la lecture du manuel, ma compréhension du comportement est que les changements locaux seront préservés. Donc, je m'attendrais à ce qu'un fichier ajouté localement existe encore dans mon répertoire de travail après svn switch. Cependant, mes collègues et moi-même avons vu plusieurs cas où les nouveaux fichiers sont supprimés par le commutateur. Malheureusement, nous ne pouvons pas comprendre comment reproduire cela.Est-ce que 'svn switch' supprime les fichiers ajoutés localement?

Existe-t-il une circonstance (une fonctionnalité ou un bogue connu) sous laquelle svn switch supprime les fichiers ajoutés localement?

Répondre

11

Je pense que c'est une mauvaise idée de changer, quand vous avez des changements non validés. Tout d'abord, validez vos modifications locales à une branche avec svn cp . <branch URL>, puis basculez. Il peut y avoir très situations difficiles que vous pouvez obtenir autrement. Imaginez que, dans une version vers laquelle vous passez, les fichiers que vous avez ajoutés localement existent déjà et sont complètement différents. Ou, que se passe-t-il si vous avez ajouté un répertoire entier de fichiers, qui ne peut pas être fusionné de manière adéquate avec les fichiers de la version vers laquelle vous passez. Voulez-vous vraiment ce gros conflit?

L'état "S" est indiqué par svn status, ce qui signifie que différentes parties de votre arborescence source ont des versions différentes. Cela arrive exactement quand le SVN est confondu avec les changements locaux pendant un changement. Il se casse juste au milieu de l'interrupteur, puis c'est une douleur dans le cou de récupérer. M'a arrivé plusieurs fois. C'est pourquoi je m'assure toujours, que ma copie de travail n'a aucune modification locale avant que je cours svn sw.

+0

Merci Ivan. Lorsque vous dites "valider vos modifications locales à une branche avec svn cp", je devrais probablement utiliser une branche temporaire spécifique au développeur? c'est-à-dire pas celui vers lequel je veux passer, car mes modifications ne sont pas encore complètes. –

+0

Oui. Ce serait une sorte de branche personnelle de votre «travail en cours». –

+0

Cela ne fonctionne pas vraiment si le chemin vers votre projet dans votre dépôt a changé (en raison de l'administrateur qui le déplace), puisque la raison pour laquelle vous changez est de vérifier votre travail. – badbod99

6

Il ne doit pas supprimer les fichiers ajoutés localement ou les fichiers non versionnés. Les cas de bordure sont où un répertoire est déplacé ou supprimé par le commutateur, mais il devrait y avoir un conflit d'arborescence dans ce cas.

Ce que je fais souvent, si je pense qu'il peut y avoir des conflits d'arbres, est d'enregistrer un patch de mes changements actuels. Ensuite, je sais que je peux effacer ma copie de travail et recommencer au besoin, sans perdre mon travail.

svn diff > ../somewhere/safe/save.diff 
# Break stuff 
patch -p0 < ../somewhere/safe/save.diff 
+0

n'avait pas pensé à ça :) – Pondidum

+0

Merci Andrew. J'ai essayé cela dans le passé mais la limitation de svn diff est qu'elle n'affiche pas de nouveaux fichiers - seulement ceux qui ont été modifiés. –

+3

Si vous 'svn ajouter 'un fichier, il apparaîtra dans le diff, avant même que vous l'ayez coché. –

0

Le comportement de svn switch est très similaire à svn update: Si la cible du commutateur est un chemin dans lequel un certain fichier est manquant par rapport à la copie de travail, ces fichiers seront supprimés de la copie de travail. Comme Ivan l'a dit, vous devriez valider vos modifications, puis passer à l'étape suivante.

Questions connexes