如何在不破坏Subversion历史的情况下重命名Java包?
我工作的那家公司正在成立,他们在这个过程中更名了。因此,我们仍然使用包名com.oldname,因为我们害怕破坏文件更改历史、版本之间的祖先链接,或者我们可能破坏的任何东西(我认为我使用的术语不正确,但您已经了解了这个概念) 我们使用:Eclipse、TortoiseSVN、Subversion 我发现我应该分很多步骤来防止.svn文件夹的内容与java文件中的包名不一致:如何在不破坏Subversion历史的情况下重命名Java包?,java,eclipse,svn,tortoisesvn,renaming,Java,Eclipse,Svn,Tortoisesvn,Renaming,我工作的那家公司正在成立,他们在这个过程中更名了。因此,我们仍然使用包名com.oldname,因为我们害怕破坏文件更改历史、版本之间的祖先链接,或者我们可能破坏的任何东西(我认为我使用的术语不正确,但您已经了解了这个概念) 我们使用:Eclipse、TortoiseSVN、Subversion 我发现我应该分很多步骤来防止.svn文件夹的内容与java文件中的包名不一致: 首先使用TortoiseSVN重命名目录,更新.svn目录 然后,手动将目录重命名回原始名称 最后使用Eclipse将包
- 首先使用TortoiseSVN重命名目录,更新.svn目录
- 然后,手动将目录重命名回原始名称
- 最后使用Eclipse将包重命名(重构)为新名称,更新java文件
包重命名测试 程序:
- 第9步注意:必须按相反的顺序进行(Eclipse重命名,然后是TortoiseSVN重命名),否则会变得复杂,因为TSVN创建了一个新文件夹/包,并将旧文件夹/包标记为删除。。。因此,除非同时将旧包放在其他地方以防止丢失,否则不能为Eclipse重命名。svn文件夹等看起来不是进一步使用此方法的好主意。(请注意:不要忘记勾选递归包重命名复选框!)
- 注意第14步:工作!我们可以看到以前的版本;我们所要做的就是告诉大家不要在复制/移动时中断,这样就可以了。一旦恢复到重命名之前的版本,包名就不会恢复到原来的名称,可能再次重构就可以了
- 结束语:我很惊讶必须按相反的顺序执行关键步骤。为了在第一个包重命名过程中做这件事,我不得不回滚一些TVSN和手动修改,对这个过程的确切结果的可重复性提出了一些怀疑。我必须做第二次测试来确认它的有效性。总而言之:它看起来不错,但需要进一步测试
- 使用svn mv移动文件夹/包
- 进入Eclipse,或者使用CLI中的grep修复文件中的包以匹配新名称 然后可以作为更改集提交,并且文件级别的历史记录应该匹配
- 使用IDE的重构功能重命名内容
- 从OrtoiseSVN启动“检查修改”对话框
- 对于每个重命名的项,您将看到两个条目:缺少的“source.java”项和未版本化的“target.java”项。突出显示两者并从关联菜单中选择“修复移动” 我发现了
- 是的,它会起作用。您可以安装svn的命令行版本,并编写一个批处理文件来完成svn的工作。自动化eclipse内容需要更多的工作,除非您已经熟悉EclipseAPI,否则可能不值得这么做
在做所有事情之前,先用一个包测试它,以确保所有步骤都正确。如果使用eclipse中包含的重构方法,是否确定保留历史记录不起作用 有了NetNeans,我会定期更改软件包名称,底层的“svn插件”会无声地将内容(保存历史)移动到新目录中(之后会进行正常的重构) 那么:如果历史记录与subversion插件一起保存,您是否在eclipse中尝试过它?(例如,在新的退房副本中,以避免失败) 至少您可以使用NetBeans来完成此一次性任务…您可以做到这一点,而且这并不难-获得干净的SVN历史记录的最佳方法是分两步完成(可以成为一次提交)-尽管为了获得良好的效果,我建议使用CLI客户端
如果您使用的是Maven或打包工具,建议您在执行类似操作之前先运行一个发行版-同时,在此之前切掉一个标签也是值得的,以防您需要返回到旧结构您考虑过使用吗?根据的说法,它可能会解决您的问题,也许它不适合您的具体需求,但OttoiseSVN有一个关于重命名的便捷功能。您可以这样做: