Как переименовать пакеты Java, не повреждая историю Подверсии?

Компания, на которую я работаю, запускает, и они изменили свое имя в процессе. Таким образом, мы все еще используем имя пакета com.oldname, потому что мы боимся повреждения истории изменений файла или ссылок родословной между версиями, или независимо от того, что мы могли повредиться (я не думаю, что использую правильные термины, но Вы получаете понятие).

Мы используем: Eclipse, TortoiseSVN, Подверсия

Я нашел где-нибудь, что должен сделать это на многих шагах для предотвращения непоследовательности между содержанием .svn папок и именами пакета в файлах Java:

  • Сначала используйте TortoiseSVN для переименования каталога, обновляя .svn каталоги.
  • Затем вручную переименуйте каталог назад к настоящему имени.
  • Для окончательного использования Eclipse для переименования пакетов (осуществляют рефакторинг) назад к новому имени, обновляя файлы Java.

Это кажется хорошим мне, но я должен знать, будут ли родословная и история и все остальное все еще когерентными и рабочими хорошо.

У меня нет ключей к тому серверу, вот почему я торопливо не копирую вещи и пробую одну или две вещи. Я хотел бы придумать серьезное основание не сделать это, или способ сделать его который работы.

Спасибо за помощь,

M. Joanis


Пакет переименовывает тест

Процедура:

  1. Создайте новый пакет com.oldname.test.renametest.subpackage.
  2. Добавьте новый класс под renametest по имени RenameTest0.java и содержащий:

    class RenameTest0 {
        public RenameTest0() {
            showMessage();
            new RenameTest1();
        }
        public static void showMessage() {
            System.out.println("RenameTest0!");
        }
        public static void main(String[] args) {
            new RenameTest0();
        }
    }
  3. Добавьте новый класс под renametest.subpackage, содержащим:

    class RenameTest1 {
        public RenameTest1() {
            showMessage();
            RenameTest0.showMessage();
        }
        public static void showMessage() {
            System.out.println("RenameTest1!");
        }
    }
  4. Тест, что RenameTest0 хорошо работает.

  5. Фиксация.
  6. Измените сообщения обоих из классов.
  7. Фиксация.
  8. Снова, измените сообщение одного класса и фиксации (просто создающий некоторую историю).
  9. Примените процедуру, предложенную выше (три шага в исходном сообщении) для переименования пакета renametest к testrename.
  10. Фиксация.
  11. Тестовый прогон.
  12. Измените сообщения снова и тест.
  13. Фиксация.
  14. Попытайтесь откатывать к версии, когда оба сообщения будут изменены одновременно в первый раз.
  15. Если все хорошо работало к этой точке, это выглядит хорошим, нет?

Результат теста:

  • Примечание по шагу 9: должен был сделать это в обратном порядке (Eclipse переименовывают ЗАТЕМ TortoiseSVN, переименовывают.), еще это становилось сложным, поскольку TSVN создают новую папку/пакет, и отмечает старый для удаления... Таким образом, Вы не можете переименовать для Eclipse, если Вы не помещаете старый пакет где-то в другом месте тем временем для предотвращения потери .svn папки и т.д. и т.д. Не был похож на хорошую идею пойти далее с этим методом. (Отметьте мне: не забывайте отмечать флажок для рекурсивного переименования пакета!)
  • Примечание по шагу 14: Обработанный! Мы видим предыдущие версии; все, что мы должны сделать, говорят для не повреждения на копии/перемещении, и она в порядке. После того, как вернувшийся к версии перед переименовыванием, имена пакета не вернулись к хорошему имени, хотя, вероятно, тот рефакторинг это снова сделало бы это.
  • Примечание конца: Я был удивлен должным быть сделать критические шаги в обратном порядке. Чтобы сделать это прямо в середине этого первого пакета переименовывает попытку, я должен был откатывать некоторый TSVN и ручные модификации, бросая немного сомнения по повторяемой природе точных результатов этой процедуры. Я должен буду сделать второй тест, чтобы подтвердить, что это - законность.Подводя итоги: это выглядит хорошим, но нуждается в дальнейшем тестировании.

16
задан xpda 19 February 2013 в 05:27
поделиться

5 ответов

Возможно, это непрактично для ваших конкретных нужд, но TortoiseSVN имеет удобную функцию переименования. Вы можете сделать это:

  1. Используйте функцию рефакторинга вашей IDE для переименования материала.
  2. Запустите диалоговое окно «Проверить наличие изменений» из TortoiseSVN.
  3. Для каждого переименованного элемента вы увидите две записи: отсутствующий элемент «source.java» и неверсированный элемент «target.java». Выделите оба и выберите «Восстановить ход» в контекстном меню.

Исправить перемещает / переименовывает

8
ответ дан 30 November 2019 в 23:00
поделиться

Вы уверены, что ведение истории НЕ работает, если вы используете метод рефакторинга, включенный в eclipse?

В NetNeans я регулярно меняю имена пакетов и базовый плагин svn незаметно переместит контент (который сохраняет историю) в новый каталог (после этого произойдет нормальный рефакторинг).

итак: пробовали ли вы его изнутри eclipse, если история сохраняется с помощью подключаемого модуля Subversion? (например, в новой копии для извлечения, чтобы избежать сбоя)

По крайней мере, вы могли бы использовать NetBeans для выполнения этой одноразовой задачи ...

2
ответ дан 30 November 2019 в 23:00
поделиться
3
ответ дан 30 November 2019 в 23:00
поделиться

Да, это сработает. Вы можете установить версию svn для командной строки и написать командный файл, который будет выполнять работу svn. Автоматизация работы с eclipse потребует немного больше усилий и, вероятно, того не стоит, если вы уже не знакомы с eclipse API.

Протестируйте его с одним пакетом, прежде чем делать все, чтобы убедиться, что все шаги выполняются правильно.

0
ответ дан 30 November 2019 в 23:00
поделиться

Вы можете сделать это, и это не так сложно - ваш лучший шанс получить чистую историю SVN - сделать это в 2 шага (может стать одним коммитом) - хотя для хороших результатов я рекомендую использовать CLI-клиент.

  1. Используйте svn mv для перемещения папок/пакетов
  2. Зайдите в Eclipse или используйте grep из CLI, чтобы исправить пакеты в файлах в соответствии с новым именем

Затем вы можете зафиксировать как набор изменений, и история на уровне файлов должна совпасть.

Если вы используете Maven или инструмент упаковки, рекомендуем вам запустить релиз, прежде чем делать что-то подобное - также стоит вырезать тег непосредственно перед этим, на случай, если вам понадобится вернуться к старой структуре

0
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: