Visual studio 如何在VisualStudio中重构而不丢失源代码管理历史记录?
在重构应用程序时,在VisualStudio2010中使用ReSharper移动/重命名源文件是一个巨大的帮助。Performce源代码管理集成如果不将其视为无关的“从此处删除”或“添加到此处”,则无法应对此类更改,从而打破了历史链条。我的问题是:Visual studio 如何在VisualStudio中重构而不丢失源代码管理历史记录?,visual-studio,version-control,refactoring,resharper,perforce,Visual Studio,Version Control,Refactoring,Resharper,Perforce,在重构应用程序时,在VisualStudio2010中使用ReSharper移动/重命名源文件是一个巨大的帮助。Performce源代码管理集成如果不将其视为无关的“从此处删除”或“添加到此处”,则无法应对此类更改,从而打破了历史链条。我的问题是: 有没有办法强迫Perforce插件首先做正确的事情 如果没有,有没有办法在事后进行调解?(Perforce是否有办法识别已移动、可能已重命名且内容更改有限的文件?) 是否有其他源代码管理产品可以透明地处理此问题 谢谢 这是其他源代码管理系统的一个失败
谢谢 这是其他源代码管理系统的一个失败,不仅仅是性能。TFS也面临同样的问题
要与Visual Studio集成,您可能需要签出。有关Explorer外壳集成的信息,请参见。与Performce 2009.2及更高版本一起使用的p4 move命令。这并不完美,您可以保留文件的历史记录,但选择文件夹不会在p4v中显示历史记录
如果您真的需要保留这些信息,这里有一个复杂的解决方案:
注意,我没有尝试过这个,因为我没有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,这在这种情况下非常好