Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不破坏Subversion历史的情况下重命名Java包?_Java_Eclipse_Svn_Tortoisesvn_Renaming - Fatal编程技术网

如何在不破坏Subversion历史的情况下重命名Java包?

如何在不破坏Subversion历史的情况下重命名Java包?,java,eclipse,svn,tortoisesvn,renaming,Java,Eclipse,Svn,Tortoisesvn,Renaming,我工作的那家公司正在成立,他们在这个过程中更名了。因此,我们仍然使用包名com.oldname,因为我们害怕破坏文件更改历史、版本之间的祖先链接,或者我们可能破坏的任何东西(我认为我使用的术语不正确,但您已经了解了这个概念) 我们使用:Eclipse、TortoiseSVN、Subversion 我发现我应该分很多步骤来防止.svn文件夹的内容与java文件中的包名不一致: 首先使用TortoiseSVN重命名目录,更新.svn目录 然后,手动将目录重命名回原始名称 最后使用Eclipse将包

我工作的那家公司正在成立,他们在这个过程中更名了。因此,我们仍然使用包名com.oldname,因为我们害怕破坏文件更改历史、版本之间的祖先链接,或者我们可能破坏的任何东西(我认为我使用的术语不正确,但您已经了解了这个概念)

我们使用:Eclipse、TortoiseSVN、Subversion

我发现我应该分很多步骤来防止.svn文件夹的内容与java文件中的包名不一致:

  • 首先使用TortoiseSVN重命名目录,更新.svn目录
  • 然后,手动将目录重命名回原始名称
  • 最后使用Eclipse将包重命名(重构)为新名称,更新java文件
这对我来说似乎很好,但我需要知道祖先、历史和其他一切是否仍然是连贯的,并且运行良好

我没有那台服务器的钥匙,这就是为什么我不匆忙备份一些东西并尝试一两件事情。我想提出一个不这样做的好理由,或者一个可行的方法

谢谢你的帮助

乔尼斯先生


包重命名测试

程序:

  • 创建一个新包com.oldname.test.renametest.subpackage
  • 在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(); } } class RenameTest1 { public RenameTest1() { showMessage(); RenameTest0.showMessage(); } public static void showMessage() { System.out.println("RenameTest1!"); } } 类重命名测试0{ 公共重命名测试0(){ showMessage(); 新的重命名测试1(); } 公共静态void showMessage(){ System.out.println(“重命名测试0!”); } 公共静态void main(字符串[]args){ 新的重命名测试0(); } }
  • 在renametest.subpackage下添加一个新类,其中包含:

    class RenameTest0 { public RenameTest0() { showMessage(); new RenameTest1(); } public static void showMessage() { System.out.println("RenameTest0!"); } public static void main(String[] args) { new RenameTest0(); } } class RenameTest1 { public RenameTest1() { showMessage(); RenameTest0.showMessage(); } public static void showMessage() { System.out.println("RenameTest1!"); } } 类重命名测试1{ 公共重命名测试1(){ showMessage(); 重命名测试0.showMessage(); } 公共静态void showMessage(){ System.out.println(“重命名测试1!”); } }
  • 测试RenameTest0是否运行正常

  • 承诺
  • 更改这两个类的消息
  • 承诺
  • 同样,更改一个类的消息并提交(只是创建一些历史记录)
  • 应用上面建议的程序(原始消息中的三个步骤)将包renametest重命名为testrename
  • 承诺
  • 试运行
  • 再次修改消息并进行测试
  • 承诺
  • 当两条消息第一次同时更改时,尝试回滚到版本
  • 如果到目前为止一切都很好,看起来不错,不是吗
  • 测试结果:

    • 第9步注意:必须按相反的顺序进行(Eclipse重命名,然后是TortoiseSVN重命名),否则会变得复杂,因为TSVN创建了一个新文件夹/包,并将旧文件夹/包标记为删除。。。因此,除非同时将旧包放在其他地方以防止丢失,否则不能为Eclipse重命名。svn文件夹等看起来不是进一步使用此方法的好主意。(请注意:不要忘记勾选递归包重命名复选框!)
    • 注意第14步:工作!我们可以看到以前的版本;我们所要做的就是告诉大家不要在复制/移动时中断,这样就可以了。一旦恢复到重命名之前的版本,包名就不会恢复到原来的名称,可能再次重构就可以了
    • 结束语:我很惊讶必须按相反的顺序执行关键步骤。为了在第一个包重命名过程中做这件事,我不得不回滚一些TVSN和手动修改,对这个过程的确切结果的可重复性提出了一些怀疑。我必须做第二次测试来确认它的有效性。总而言之:它看起来不错,但需要进一步测试

      • 是的,它会起作用。您可以安装svn的命令行版本,并编写一个批处理文件来完成svn的工作。自动化eclipse内容需要更多的工作,除非您已经熟悉EclipseAPI,否则可能不值得这么做


        在做所有事情之前,先用一个包测试它,以确保所有步骤都正确。

        如果使用eclipse中包含的重构方法,是否确定保留历史记录不起作用

        有了NetNeans,我会定期更改软件包名称,底层的“svn插件”会无声地将内容(保存历史)移动到新目录中(之后会进行正常的重构)

        那么:如果历史记录与subversion插件一起保存,您是否在eclipse中尝试过它?(例如,在新的退房副本中,以避免失败)

        至少您可以使用NetBeans来完成此一次性任务…

        您可以做到这一点,而且这并不难-获得干净的SVN历史记录的最佳方法是分两步完成(可以成为一次提交)-尽管为了获得良好的效果,我建议使用CLI客户端

      • 使用svn mv移动文件夹/包
      • 进入Eclipse,或者使用CLI中的grep修复文件中的包以匹配新名称
      • 然后可以作为更改集提交,并且文件级别的历史记录应该匹配


        如果您使用的是Maven或打包工具,建议您在执行类似操作之前先运行一个发行版-同时,在此之前切掉一个标签也是值得的,以防您需要返回到旧结构

        您考虑过使用吗?根据

        的说法,它可能会解决您的问题,也许它不适合您的具体需求,但OttoiseSVN有一个关于重命名的便捷功能。您可以这样做:

      • 使用IDE的重构功能重命名内容
      • 从OrtoiseSVN启动“检查修改”对话框
      • 对于每个重命名的项,您将看到两个条目:缺少的“source.java”项和未版本化的“target.java”项。突出显示两者并从关联菜单中选择“修复移动”
      • 我发现了