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

2022-09-03 07:25:18

我工作的公司正在创业,他们在这个过程中改变了他们的名字。因此,我们仍然使用软件包名称com.oldname,因为我们害怕破坏文件更改历史记录,或版本之间的祖先链接,或者我们可以破坏的任何内容(我认为我使用的不是正确的术语,但你明白这个概念)。

我们使用:Eclipse,TortoiseSVN,Subversion

我发现我应该在很多步骤中做到这点,以防止.svn文件夹的内容与java文件中的软件包名称之间不一致:

  • 首先使用 TortoiseSVN 重命名目录,更新 .svn 目录。
  • 然后,手动将目录重命名回原始名称。
  • 最后使用 Eclipse 将包重命名(重构)回新名称,请更新 java 文件。

这对我来说似乎很好,但我需要知道祖先和历史以及其他一切是否仍然连贯且运作良好。

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

感谢您的帮助,

M. 乔安妮丝


包重命名测试

程序:

  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. 测试重命名测试 0 是否运行良好。

  5. 犯。
  6. 更改两个类的消息。
  7. 犯。
  8. 同样,更改一个类的消息并提交(只是创建一些历史记录)。
  9. 应用上面建议的过程(原始消息中的三个步骤)重命名包重命名test到testrename。
  10. 犯。
  11. 试运转。
  12. 再次修改消息并进行测试。
  13. 犯。
  14. 尝试在首次同时更改两条消息时回滚到版本。
  15. 如果到目前为止一切正常,它看起来不错,不是吗?

测试结果:

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

答案 1

也许这对您的确切需求不切实际,但是TortoiseSVN有一个关于重命名的便捷功能。你可以这样做:

  1. 使用 IDE 的重构功能重命名内容。
  2. 从 TortoiseSVN 启动“检查修改”对话框。
  3. 对于每个重命名的项目,您将看到两个条目:缺少的“源.java”项目和未版本控制的“目标.java”项目。突出显示两者,然后从上下文菜单中选择“修复移动”。

修复移动/重命名


答案 2

您是否考虑过使用子剪辑插件?它可能会解决您的问题,根据我如何使用Eclipse重构工具并通过Subclipse与SVN保持同步?


推荐