如何在Visual Studio中重构而不丢失源代码控制历史记录?

时间:2011-04-26 19:51:57

标签: visual-studio version-control refactoring resharper perforce

在重构应用程序时,使用ReSharper在Visual Studio 2010中移动/重命名源文件是一个巨大的帮助。 Perforce源代码控制集成无法处理这些类型的更改,而不将其视为不相关的“从此处删除”“添加到此处”,这会打破历史链。我的问题是:

  1. 有没有办法强制Perforce插件首先做正确的事情?
  2. 如果没有,有没有办法在外部事后调和? (Perforce会以任何方式识别已移动并可能已重命名并且内容更改有限的文件吗?)
  3. 是否有其他源代码管理产品可以透明地处理这个问题?
  4. 谢谢!

10 个答案:

答案 0 :(得分:3)

这是其他源控制系统的失败,而不仅仅是Perforce。 TFS也遇到同样的问题。

  1. 不,没有办法。
  2. 除了在您的签到评论中发表评论外,如果您确保提交仅包含删除和添加,您可以将链接保留在那里。
  3. 我相信Git会这样做。它还处理文件之间代码部分的移动。

答案 1 :(得分:2)

新的Perforce插件P4VS在管理Visual Studio中移动/重命名的文件方面做得更好。如果您只是尝试过P4SCC而感到失望,请尝试P4VS。我发现它确实是"对"在大多数情况下,P4SCC没有做到这一点。

答案 2 :(得分:1)

您可能需要查看Git。它没有像其他修订控制系统那样的特定于文件的挂起,因为修订历史记录不依赖于特别命名的文件。每个提交都是前一个代码的差异,而不管其中的文件。

要与Visual Studio集成,您可能需要查看Git Extensions。对于Explorer shell集成,请参阅TortoiseGit

答案 3 :(得分:1)

使用Perforce 2009.2及更高版本,有一个p4移动命令。它并不完美,您保留文件的历史记录,但选择文件夹不会在p4v中显示历史记录。

答案 4 :(得分:1)

您可以通过查看文件修订图来查看完整的历史记录。

要采取的步骤是: 1)继续进行重命名 2)右键单击并查看新命名文件的历史记录 3)它仅显示当前版本,但是,如果右键单击该版本并选择修订图,则可以看到包含删除/添加发生链接的完整历史记录。 4)您可以在图表上选择节点并执行差异以查看不同文件之间的更改。

这是一个额外的步骤,并不是很明显,但它适用于我。

答案 5 :(得分:0)

  1. 不,不是我知道的。尝试联系Perforce支持。

  2. 我不会这样。

  3. 确实不是另一个源代码控制产品,但您可以尝试VS2P4而不是P4SCC,这似乎与ReSharper的重命名类重构一起使用。我前段时间进行了转换并且非常喜欢它,即使它有一套自己的怪癖。可通过VS2010 Extension Manager进行安装。

答案 6 :(得分:0)

如果你真的需要保留这些信息,这是一个复杂的解决方案:

  1. 使用Perfarce extension创建Perforce软件仓库(或子部分)的Mercurial克隆。
  2. 安装VisualHg SCC plugin,这是Mercurial与VS
  3. 的集成
  4. 你的重构 - 我认为,VisualHg可以正确应对重命名。在使用Visual Studio重命名文件的手动情况下肯定会这样做,因此我假设Resharper也能正常工作。
  5. 将Mercurial的更改推送回Perforce。这应该包括你正在进行的正确的分支和删除(移动)操作。
  6. 注意我没试过这个,因为我没有Resharper,但Perforce-> Mercurial-> Perforce链接适用于Perfarce,而VisualHg远远优于我使用的其他SCC插件。所以它可能值得一试。您可以先快速退出Resharper / VisualHg链接,如果可以,则执行Perforce-> Mercurial步骤。

答案 7 :(得分:0)

我尝试使用ReSharper的上下文帮助“重命名文件以匹配类型名称”VS2P4。而且......

它不起作用。它显示了对话框

enter image description here

如果我点击“继续更改”,它确实会发出警告所说的内容。它删除并添加文件,而不通知Perforce。只检出项目文件。

答案 8 :(得分:0)

FWIW,今天发布的VS2P4版本1.74具有重大的性能改进,特别是对于包含数千个文件的解决方案。

答案 9 :(得分:0)

VS Macro

我已经编写了一个宏来为Visual Sudio的Rename事件添加“p4 move -k”动作。 见answer of "How to keep change history while renaming files in Visual Studio using Perforce"

使用该宏,您可以在Visual Studio中至少执行正确的文件重命名 我认为无法正确地重命名类和文件(例如ReSharper),因为在Perforce中无法在一个更改列表中重命名和更改文件。