Удобно перемещать класс в другой пакет в eclipse без borking svn

При перемещении файла из old.package to new.package мне нужно выполнить две вещи:

  • Обновить все ссылки на этот класс (во всех файлах проекта), чтобы новый пакет использовался
  • svn move old/package/Foo.java new/package/Foo.java

Я использую subversive в Eclipse Ganymede. Когда я просто перетаскиваю файл из одного пакета в другой, все ссылки обновляются, и файл перемещается по файловой системе. Но SVN не знает об этом, и поэтому команда svn move old/package/Foo.java new/package/Foo.java не работает (очевидно), когда old/package/Foo.java не существует (поскольку eclipse уже переместил его).

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

Ответ 1

Я использую Subclipse и поддерживает перенос файлов между пакетами

Ответ 2

Я экспериментировал и думаю, что нашел способ:

1) Черепаха - перемещайте файл, используя контекстное меню с щелчком правой кнопкой мыши (или любой другой метод SVN, который вы хотите).

2) Используйте файловую систему Windows, чтобы вернуть ее.

3) Перетащите файл в Eclipse, чтобы обновить все ссылки.

4) Commit - он показывает как delete/add, но сохраняет историю, и он меняет ссылки на пакеты в одном коммите (сохраняя каждую готовность сборки).

Старый вопрос, но я продолжаю возвращаться к нему, так что это моя документация!

Ответ 3

Юваль правый. Это звучит как (очень неудачный!) Недостаток в Subversive. (не имея опыта работы с Subversive, я не могу сказать точно) Subclipse определенно справляется с этим правильно, подключаясь к правильным API-интерфейсам в Eclipse.

Ответ 4

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

Ответ 5

Если вы разрешите Eclipse выполнять рефакторинг, то, конечно же, он внесет изменения в фактические файлы, которые SVN должен забрать при фиксации корневого каталога? Я не думаю, что какой-то шаг сократит его, хотя SVN придется подобрать тот файл, который отсутствует в его исходном каталоге, но повторно добавить его из нового каталога. Это липкая ситуация, я бы не знал, какой лучший метод, я бы просто сделал рефакторинг, а затем лично передал корень, хотя это не было бы шагом.