Restaurer un référentiel Subversion ET le remettre à jour avec les modifications locales de Tout le monde

StackOverflow https://stackoverflow.com/questions/1440950

Question

Je n'ai pas utilisé cette copie à chaud pour sauvegarder mon référentiel Subversion. Nous utilisons Visual SVN Server (dernière version) avec tortoise. J'ai copié C: \ Repositories et l'ai sauvegardé il y a quelques jours. Je souhaite maintenant le restaurer.

Je peux maintenant utiliser le référentiel avec le dossier de référentiel sauvegardé copié.

et ensuite, je suppose que je dois maintenant passer en revue manuellement le projet local de chacun pour voir qui a la dernière révision? Si oui, cela me prendra des heures.

Quelqu'un sait si c'est la bonne ou la seule façon? Est-ce vraiment ce manuel? Je suppose que ce serait parce que tout le monde a des changements différents localement.

Était-ce utile?

La solution

Qu'en est-il de cette approche, chaque développeur:

  1. Est-ce que TortoiseSVN - > Exportation de leur copie de travail maintenant non valide vers un emplacement temporaire
  2. Obtient une nouvelle extraction à partir du référentiel restauré
  3. Copie la copie de travail exportée (c'est-à-dire les répertoires no .svn) par-dessus la nouvelle copie de travail
  4. Mettez à jour et commettez comme d'habitude

Notez que les conflits de fusion peuvent être plus nombreux que d'habitude, mais ils peuvent être résolus de la manière habituelle.

Autres conseils

Toutes les modifications apportées depuis la sauvegarde ne sont pas présentes dans le référentiel et tout le monde devra effectuer une nouvelle extraction à partir du référentiel restauré. (Les numéros de révision ont changé et vous aurez un désordre si vous ne le faites pas.)

En ce qui concerne la récupération des modifications apportées aux copies locales du développeur, cela sera plutôt manuel. Cependant, & diff; diff " et " patch " êtes vous amis. Si vous n'êtes pas familier avec cygwin, vous voudrez vous en procurer et obtenir les paquetages diff, patch, diffutils et patchutils afin que vous disposiez de la commande 'diff' et de la commande 'patch'. Vous pouvez utiliser la commande " diff " commande pour créer un fichier contenant le delta entre une copie de l’arbre source et une autre. Vous voudrez l'utiliser comme ceci:

diff -urN --exclude=.svn fresh_check_from_new_repo old_working_copy > developer1changes.patch

Faites cela pour la copie de travail de chaque développeur. Vous pouvez récupérer ces fichiers et appliquer les modifications à une nouvelle commande à l’aide du bouton "correctif". commande comme ceci:

cd working_copy
patch -p1 -i ...../developer1changes.patch

Vous allez maintenant avoir une copie de travail avec leurs modifications. (Bien que sans leurs ajouts svn, svn rms et les modifications de propriétés.) À partir de là, déterminez ce qui doit être validé.

Vous pouvez utiliser la " filterdiff " commande pour extraire le fichier de correctif et filtrer des portions des modifications, le diriger vers le correctif, et il appliquera uniquement ces modifications.

modifier: Une autre option: pour chaque développeur, créez une branche et vérifiez cette branche, puis copiez leur copie locale sur les fichiers de cette nouvelle copie de travail et validez-la.

Cela inclut tout le travail dans le référentiel où il ne sera pas perdu. Vous devrez alors gérer les conflits lorsque vous essayez de fusionner les branches dans le coffre. À ce stade, vous devriez pouvoir utiliser les outils de l'interface graphique pour sélectionner les modifications à conserver ou à lancer.

Mais la réponse courte est: vous avez beaucoup de travail à faire car vous n’avez pas de sauvegarde récente du référentiel ... alors, une fois que vous pourrez tous travailler à nouveau, configurez-en beaucoup plus. programme de sauvegarde fréquent.

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