2010-02-05 13 views
22

Je suis assez nouveau à la fois Subversion et Subclipse et je vois quelques problèmes qui me font croire qu'il y a une différence entre la mise à jour et la synchronisation. Plus précisément, je trouve que lorsque j'essaie de revenir (en utilisant l'historique de la sous-clipse), je reçois souvent un message disant «Impossible de renverser fusionner une plage de l'histoire future d'un chemin, essayez de mettre à jour d'abord». Ma synchronisation devrait m'assurer que j'ai la version "tête" de tous les fichiers de ma branche sur le REPO, mais faire une "Mise à jour en tête" résout le problème ... alors qu'est-ce qui donne? J'ai essayé de vérifier la console SVN pour voir ce qui change, mais ce n'est pas très bavard.SVN Synchroniser vs mettre à jour vers la tête (sous-claquette)

Des idées?

J'ai une deuxième question, mais je suppose que la réponse à la première éclaircira. Si vous êtes curieux et avez le temps de lire, je vais le taper aussi. Voici le scénario ... J'ai ramifié tous mes fichiers à partir d'un tag "Production", et j'ai commencé à travailler sur mon projet. Après quelques validations, je vérifie l'historique d'un fichier modifié et remarque que la version 'en gras' (selon la documentation, cela devrait être la tête) est en dessous de tous mes commits. C'est comme si ce que j'ai n'est pas la tête. Mais la tête est juste la dernière version du projet, n'est-ce pas? Alors qu'est-ce qui me manque?

Merci pour votre réponse et prendre le temps de lire ceci!

Répondre

2

Je pense que votre hypothèse selon laquelle la synchronisation est la même que la mise à jour de HEAD est fausse. Si, dans le langage de Subclipse, "synchronize" signifie "commit", alors il est certainement faux car la validation ne met pas à jour votre copie de travail. Vous devez mettre à jour explicitement après vous être engagé à HEAD.

Ce qui m'amène à votre deuxième question: Je pense que la raison pour laquelle la ligne en gras est inférieure à d'autres commits est en raison de la raison ci-dessus — validation ne met pas à jour. Cela signifie que vous pouvez valider une modification dans un fichier, puis regarder un autre fichier et le voir comme étant plus ancien que HEAD, car ces autres fichiers n'ont pas été également importés dans HEAD.

Cet article peut aider à éclaircir ce concept de révisions mixtes: http://markphip.blogspot.com/2006/12/mixed-revision-working-copies.html

Je vous encourage également à vous familiariser avec le SVN documentation, en travaillant avec des plugins et des extensions pour Subversion devient toujours plus facile quand vous comprenez comment le SVN sous-jacente le système fonctionne.

+0

Hey Mike, je pris un coup d'œil à cet article, mais je ne suis pas certain que cela s'applique. Bien qu'un commit ne met pas à jour votre copie de travail, une synchronisation devrait. Je vois non seulement les changements sortants, mais entrants. Cela ne serait-il pas la même chose que la mise à jour? – gergesi

+1

Ahh, la réponse est dans cet article mais dans la section sur les dossiers! Lorsque je valide un fichier, son dossier parent ne passe pas à ma révision. Il connaît la révision (est présent dans l'histoire) mais ne bouge pas. La synchronisation ignore cela, mais Update to HEAD le résout. – gergesi

26

Il existe une différence. Lorsque vous utilisez la vue Synchroniser, seuls les éléments de la vue sont mis à jour. Avec Subversion, les dossiers ont également une révision qui est bumped chaque fois qu'un enfant est modifié. Cependant, comme ceux-ci n'apparaissent pas dans la vue, ils ne sont jamais mis à jour. Lorsque vous effectuez Team> Update sur le projet, tous les dossiers et fichiers sont mis à jour en une seule révision uniforme. J'ai deux ou trois messages de blog qui expliquent ceci:

Celui-ci explique le concept SVN de base d'une copie de travail de révision mixte, et il est essentiel de comprendre ceci:

http://markphip.blogspot.com/2006/12/mixed-revision-working-copies.html

La seconde montre une caractéristique en Subclipse pour faire face à ceci:

http://markphip.blogspot.com/2006/12/subclipse-synchronize-feature-show-out.html

Depuis le second blog a été écrit, la plupart des utilisateurs de Subclipse trouvé qu'ils n'aimaient pas cette fonctionnalité, même si ce qu'il lps avec ce problème. Il est donc maintenant désactivé par défaut dans les versions actuelles. Je ne pense pas que quiconque l'utilise plus.L'essentiel est simplement d'utiliser occasionnellement Team> Update sur votre projet pour amener le tout à une seule révision uniforme.

Mark

+0

Merci @Mark! Ceci et vos articles de blog liés ont certainement aidé à éclaircir quelques choses dans mon esprit au sujet de SVN et de Subclipse. –