Visual studio 如何在VisualStudio中重构而不丢失源代码管理历史记录?

Visual studio 如何在VisualStudio中重构而不丢失源代码管理历史记录?,visual-studio,version-control,refactoring,resharper,perforce,Visual Studio,Version Control,Refactoring,Resharper,Perforce,在重构应用程序时,在VisualStudio2010中使用ReSharper移动/重命名源文件是一个巨大的帮助。Performce源代码管理集成如果不将其视为无关的“从此处删除”或“添加到此处”,则无法应对此类更改,从而打破了历史链条。我的问题是: 有没有办法强迫Perforce插件首先做正确的事情 如果没有,有没有办法在事后进行调解?(Perforce是否有办法识别已移动、可能已重命名且内容更改有限的文件?) 是否有其他源代码管理产品可以透明地处理此问题 谢谢 这是其他源代码管理系统的一个失败

在重构应用程序时,在VisualStudio2010中使用ReSharper移动/重命名源文件是一个巨大的帮助。Performce源代码管理集成如果不将其视为无关的“从此处删除”或“添加到此处”,则无法应对此类更改,从而打破了历史链条。我的问题是:

  • 有没有办法强迫Perforce插件首先做正确的事情
  • 如果没有,有没有办法在事后进行调解?(Perforce是否有办法识别已移动、可能已重命名且内容更改有限的文件?)
  • 是否有其他源代码管理产品可以透明地处理此问题

  • 谢谢

    这是其他源代码管理系统的一个失败,不仅仅是性能。TFS也面临同样的问题

  • 不,不可能
  • 除了签入注释中的注释外,如果您确保提交只包括删除和添加,那么您可以将链接保留在那里
  • 我相信是的。它还处理文件之间代码部分的移动
  • 你可能想退房。与其他版本控制系统一样,它没有特定于文件的挂起,因为版本历史不依赖于特定命名的文件。每次提交都是前一个代码的差异,与其中的文件无关


    要与Visual Studio集成,您可能需要签出。有关Explorer外壳集成的信息,请参见。

    与Performce 2009.2及更高版本一起使用的p4 move命令。这并不完美,您可以保留文件的历史记录,但选择文件夹不会在p4v中显示历史记录

  • 不,我不知道。尝试联系Performance支持

  • 我不会走那条路

  • 实际上并不是另一个源代码管理产品,但您可以尝试替代P4SCC,它似乎可以与ReSharper的重命名类重构一起工作。我在一段时间前做了这个转变,我真的很喜欢它,尽管它有自己的一套怪癖。可通过VS2010扩展管理器进行安装


  • 如果您真的需要保留这些信息,这里有一个复杂的解决方案:

  • 使用创建Perforce仓库(或子部分)的Mercurial克隆
  • 安装,这是Mercurial与VS的集成
  • 进行重构——我相信VisualHg能够正确处理重命名。在从withn Visual Studio重命名文件的手动情况下确实如此,因此我假设Resharper也可以工作
  • 将更改从Mercurial推回到Performance。这应该包括您正在进行的正确的分支和删除(移动)操作

  • 注意,我没有尝试过这个,因为我没有Resharper,但是Perforce->Mercurial->Perforce链接可以很好地与Perfarce配合使用,VisualHg比我使用过的其他SCC插件要好得多。所以这可能值得一试。您可能首先可以快速退出Resharper/VisualHg链接,如果没有问题,则执行performe->Mercurial步骤

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

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


    这是一个额外的步骤,不是很明显,但对我来说很有效。

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

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


    如果我点击“继续改变”,它真的做到了警告所说的。它删除并添加文件,而不通知Perforce。仅签出项目文件。

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

    VS宏 我编写了一个宏,用于向Visual Sudio的重命名事件添加“p4 move-k”操作。 看

    使用该宏,您至少可以在Visual Studio中进行正确的文件重命名。

    我认为不可能立即正确重命名类和文件(例如ReSharper),因为在Perforce中不可能在一个更改列表中重命名和更改文件。

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

    我不确定我是否理解,因为某些重构总是被视为“先删除,然后添加”类型的更改。这真的取决于你在做什么。现在,如果Perforce将简单的重命名等视为“先删除后添加”,则会出现问题。例如,如果您从命令行或Perforce GUI执行移动/重命名,则Perforce将做正确的事情。如果您从内部执行相同的操作,而不是从Perforce move/rename手动调用正确的操作,那么情况就不是这样了,但是我的场景处理的是在Visual Studio内部发生的批处理操作,这是Resharper重构的结果。有趣的。。。你是说Git对单个文件的历史没有概念,还是说它可以从某种程度上看出Dir1\Dir3\foo.cs变成了Dir2\Dir4\bar.cs?它将整个存储库视为一个单元,因此单个文件甚至文件夹变得不那么重要。它不能说一件事变成了另一件事,只能说它们是不同的。如果您足够频繁地执行更新/提交和推/拉操作,则历史记录基本上会保留下来。事实并非如此,perforce可以跨重命名跟踪文件的修订,并且可以正常移动。请确保您使用的是2009.2或更高版本。我们最终切换到Git,这在这种情况下非常好