Comment renommer des paquets Java sans casser l'histoire de Subversion?
La société, je travaille pour est en cours de démarrage et ils ont changé leur nom dans ce processus. Nous avons donc toujours utiliser le nom du package com.oldname parce que nous avons peur de casser le fichier de l'historique des modifications, ou l'ascendance des liens entre les versions, ou ce qu'on pourrait casser (je ne pense pas que j'utilise les bons termes, mais vous obtenez le concept).
Nous utilisons: Eclipse, TortoiseSVN, Subversion
J'ai trouvé quelque part que je devrais le faire en plusieurs étapes pour éviter l'incohérence entre le contenu de .svn dossiers et les noms de package dans les fichiers java:
- De la première utilisation de TortoiseSVN pour renommer le répertoire, la mise à jour de la .svn répertoires.
- Puis, renommer manuellement le répertoire au nom d'origine.
- Pour enfin utiliser Eclipse pour renommer les paquets (refactor) sauvegarder le nouveau nom, la mise à jour les fichiers java.
Qui semble bon pour moi, mais j'ai besoin de savoir si la généalogie et de l'histoire et tout le reste sera toujours cohérent et fonctionne bien.
Je n'ai pas les clés de ce serveur, c'est pourquoi je n'ai pas hâte de sauvegarde et d'essayer une ou deux choses. Je voudrais trouver une bonne raison de ne pas le faire, ou une façon de faire qui fonctionne.
Merci pour votre aide,
M. Joanis
Paquet de renommer test
Procédure:
- Créer un nouveau package com.oldname.test.renametest.sous-paquetage.
- Ajouter une nouvelle classe de sous renametest appelé RenameTest0.java et contenant:
classe RenameTest0 { public RenameTest0() { showMessage(); nouveau RenameTest1(); } public static void showMessage() { Système..println("RenameTest0!"); } public static void main(String[] args) { nouveau RenameTest0(); } }
- Ajouter une nouvelle classe de sous renametest.sous-paquetage contenant:
classe RenameTest1 { public RenameTest1() { showMessage(); RenameTest0.showMessage(); } public static void showMessage() { Système..println("RenameTest1!"); } }
- Test RenameTest0 fonctionne très bien.
- Commettre.
- Modifier les messages des deux classes.
- Commettre.
- Encore une fois, changer le message d'une de la classe et de s'engager (juste de créer un peu d'histoire).
- Appliquer la procédure proposée ci-dessus (les trois étapes dans le message d'origine) pour renommer paquet renametest à testrename.
- Commettre.
- Essai.
- Modifier à nouveau les messages et de test.
- Commettre.
- Essayez de revenir à la version lorsque les deux messages ont été changé en même temps la première fois.
- Si tout a bien fonctionné à ce point, il semble bon, non?
Résultat du test:
- Note sur l'étape 9: Eu à le faire dans ordre inverse (Eclipse renommer PUIS TortoiseSVN renommer.), sinon cela se complique, comme TSVN créer un nouveau dossier/le paquet et les marques de l'ancien pour la suppression... Donc vous ne pouvez pas renommer pour Eclipse, sauf si vous placez l'ancien paquet quelque part dans le temps pour éviter de perdre .svn dossiers, etc. etc. Ne ressemblait pas du tout une bonne idée d'aller plus loin avec cette méthode. (Note à moi-même: ne pas oublier de cocher la case pour récursive paquet de renommer!)
- Note sur l'étape 14: Travaillé! Nous pouvons voir les versions précédentes; tout ce que nous avons à faire est de dire de ne pas le casser sur copier/déplacer et c'est ok. Une fois revenue à une version avant de le renommer, les noms de package ne sont pas de retour pour le nom siprobablement que la refactorisation de nouveau le ferait.
- La note de fin: j'ai été surpris d'avoir à faire la critique étapes dans l'ordre inverse. Pour faire droit au milieu de ce premier paquet de renommer essayer, j'ai dû revenir sur certains TSVN et les modifications manuelles, en jetant un peu de doute sur la nature reproductible de l'exactitude des résultats de cette procédure. Je vais devoir faire un deuxième test pour confirmer sa validité. Pour résumer: il semble bien, mais a besoin de plus de tests.
source d'informationauteur Joanis
Vous devez vous connecter pour publier un commentaire.
C'est peut-être pas pratique pour vos besoins exacts mais TortoiseSVN a une fonction pratique concernant les renomme. Vous pouvez faire ceci:
La réparation se déplace/renomme
Avez-vous considéré l'utilisation de la Plug-in Subclipse? Il peut résoudre vos problèmes, selon Comment puis-je utiliser Eclipse Outils de Refactoring et de rester en synchronisation avec SVN par Subclipse?
Êtes-vous sûr de garder l'histoire ne fonctionne PAS si vous utilisez le refactoring méthode incluse dans eclipse?
Avec NetNeans j'ai changer régulièrement les noms de paquets et le sous-jacent 'svn du plugin' silencieusement déplacer le contenu (ce qui économise de l'histoire) dans le nouveau répertoire (après que le refactoring va arriver).
: Avez vous essayé depuis eclipse si l'histoire est conservée avec le plugin subversion? (par exemple, dans une nouvelle de check-out copie pour éviter l'échec)
Au moins vous pourriez utiliser NetBeans pour ce faire d'une tâche de temps ...
Oui, cela va fonctionner. Vous pouvez installer la version ligne de commande de svn et écrire un fichier batch qui va faire le svn choses. L'automatisation de l'éclipse choses devraient être un peu plus de travail, et probablement pas la peine, sauf si vous êtes déjà familier avec l'éclipse de l'API.
Le tester avec un paquet avant de tout faire juste pour s'assurer que vous êtes en train de faire toutes les étapes de la droite.
Vous peut ce faire, et il n'est pas difficile - votre meilleur pari pour obtenir un nettoyage SVN histoire est de le faire en 2 étapes (qui peut devenir un commit) - bien que pour de bons résultats, je recommande l'utilisation de la CLI client.
Alors que vous pouvez vous engager en tant que changement, et l'histoire au niveau du fichier doit correspondre.
Si vous utilisez Maven ou un outil de conditionnement, vous recommandons d'utiliser une version avant de faire quelque chose comme cela - aussi, il vaut la peine de couper un tag immédiatement avant cette dans le cas où vous avez besoin de revenir à l'ancienne structure
J'ai découvert que le plug-in subclipse donne le message d'erreur "est déjà sous contrôle de version" lors de la validation d'une classe qui a été déplacé vers un nouveau package (c'est à dire pas sous contrôle de code source encore) et le parent de ce paquet est également nouveau.
Lorsque cela se produit, je peux valider les modifications en utilisant TortoiseSVN. Après que j'ai seulement besoin de rafraîchir le projet dans Eclipse.
Après le passage d'une classe à un nouveau package dont le parent est déjà sous contrôle de code source, subclipse peut commettre ce changement sans problèmes.
Au lieu de le renommer les paquets que vous pourriez faire ceci:
créer la nouvelle structure des paquets de votre projet. Une fois cela fait, votre projet doit ressembler à quelque chose comme ceci:
ajouter les nouveaux dossiers sous contrôle de version, de sorte svn peut les suivre