【问题标题】:Split files while keeping history in SVN在 SVN 中保留历史记录的同时拆分文件
【发布时间】:2011-02-15 09:47:36
【问题描述】:

在重构过程中,有时我必须将一个源文件拆分为两个或多个(例如,当一个类变得如此之大以至于应该拆分为两个类时)。

例如,设 A 为原始文件,B1 和 B2 为新文件。

是否可以告诉SVN B1和B2都应该“继承”文件A的完整历史,所以当我查看B1和B2的历史日志时,我可以看到它们已经从A中出现,日志如下所示:

A                B1                  B2
- change A3      - change B1.2       - change B2.2
- change A2      - change B1.1       - change B2.2
- change A1      - change A3         - change A3
                 - change A2         - change A2
                 - change A1         - change A1

我知道如何在重命名文件时保留历史记录(如讨论的 here on SO),但 AFAIK 只是一种将 A 的历史记录与 B1 或 B2 相关联的方法,而不是两者。

目前我在 Windows 上使用 Tortoise SVN 1.6.12。

【问题讨论】:

  • 这个问题是对时间旅行不同时间线的隐喻,不是吗,博士?
  • @ACK_stoverflow:你抓住了我 ;-)

标签: svn tortoisesvn


【解决方案1】:

只需制作文件 A 的 2 个 SVN 副本,然后 SVN 删除文件 A。

我刚刚用一个新的 repo 做了一个快速测试,它似乎工作得很好。

  1. 我创建了包含两个类 B1 和 B2 的文件 A.txt,并提交了文件 a.txt
  2. 我将 A.txt 的 SVN 副本复制到 B1.txt 并从 B1.txt 中删除 B2 类的声明
  3. 我将 A.txt 的另一个 SVN 副本复制到 B2.txt 并从 B2.txt 中删除了 B1 类的声明
  4. 我SVN删除了A.txt
  5. 承诺一切,历史看起来不错。

【讨论】:

  • 备注:使用 TortoiseSVN 复制文件最容易通过右键单击拖动文件来完成。上下文菜单将显示一些选项,例如 SVN 复制和 SVN 移动,可以同时重命名。
  • 有没有办法从 .Net 代码中以编程方式进行 SVN 复制?我需要自动执行上述步骤。可以使用 Microsoft Roslyn(用于 .Net 代码)在语义上检测文件中的类并处理它们。
猜你喜欢
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多