Visual Studio:查看完整的git提交历史记录(包括重命名)

Visual Studio:查看完整的git提交历史记录(包括重命名),git,visual-studio,visual-studio-2015,Git,Visual Studio,Visual Studio 2015,我正在使用Visual Studio 2015和Microsoft Git客户端。我在使用该工具查看历史记录和注释时遇到了一些问题,因为VisualStudio在查看git历史记录时似乎无法处理文件重命名。有什么好办法吗 顺便说一句:我尝试使用历史查看器中的“显示完整历史”工具按钮,但它仍然没有实际显示重命名的历史 以下是我所做的测试: 在VisualStudio中,我右键单击该文件并选择“查看历史”。(只显示了4次提交) 在历史记录窗口中,我单击了“显示完整历史记录”--仍然是相同的4次提交

我正在使用Visual Studio 2015和Microsoft Git客户端。我在使用该工具查看历史记录和注释时遇到了一些问题,因为VisualStudio在查看git历史记录时似乎无法处理文件重命名。有什么好办法吗

顺便说一句:我尝试使用历史查看器中的“显示完整历史”工具按钮,但它仍然没有实际显示重命名的历史

以下是我所做的测试:

  • 在VisualStudio中,我右键单击该文件并选择“查看历史”。(只显示了4次提交)
  • 在历史记录窗口中,我单击了“显示完整历史记录”--仍然是相同的4次提交
  • 在git命令行中,我运行了git log--follow TheFile.cs(它产生了13次提交)
  • 在Atlassian源代码树中,我提取了文件的日志,并选中了“跟随重命名文件”选项。它执行了与命令行相同的13次提交
  • 我真正想要的是在VisualStudio中有一个匹配的选项。这可能吗?

    Visual Studio会跟踪两次提交之间的历史记录,以确定是否重命名了文件。在这里,我将一个文件的原始名称重命名为
    重命名为
    ,同时对内容进行了更改:

    但是,Git不跟踪两次提交之间的更改,而是比较提交的快照以确定文件是如何更改的。因此,存储库的历史记录中没有重命名信息。相反,这是通过将原始提交中的文件与后续提交中的文件进行比较来计算的。如果它们足够相似,Git会认为这是一个重命名

    由于这是一种启发式方法,因此不能保证这将被视为重命名。然而,一般来说,VisualStudio和Git for Windows应该在这些方面达成一致。我很好奇为什么一个报告这是一个重命名,而另一个没有。有两种可能性:

  • 这个文件非常接近相似性的边缘——比如说,Git认为这两个修订版之间有61%的相似性,因此是一个重命名,而Visual Studio认为这两个修订版之间只有59%的相似性,因此不是一个重命名
  • 这里有一些错误,VisualStudio没有正确计算相似性。如果让我猜的话,我会猜到有一个空格或行尾问题,因为这在Git中总是一个问题

  • 如果您能够共享此文件的两个修订版,打开一个连接错误或直接通过电子邮件发送给我将有助于进一步调查。

    嗨,爱德华:恐怕公司政策不允许我共享我们的任何源代码。在git命令行中使用--follow选项可以提供我所期望的版本,并且我可以从cmd行看到的最旧版本与VS显示的最旧版本有很大的不同。VisualStudio显示的最古老的一个大约有100行。我在准备从svn迁移到git时发现了这个问题。查看SVN历史,目录似乎被重命名了,这是VS中最古老的版本。值得一提的是,它确实看起来像是VS看到了一些重命名——当我研究迁移时,我了解了git如何跟踪更改,在测试中看到VS处理重命名,我感到惊喜。上面的这个发现有点像是第11个小时的捕获。我要看看我是否真的可以追踪到目录重命名。我猜VS不包括“-follow”作为参数。我已经对您的代码库进行了相当大的重构。在VS外部,我可以使用“-follow”查看历史。但是VS将在“重命名提交”时断然停止。@JacobT.Nielsen没有
    ——follow
    参数。VS不使用Git命令行。重命名检测启发式可能存在差异。如果让我猜的话,我敢打赌这和行尾有关,因为所有可怕的事情都与之有关。我有点困惑。据我所见,VisualStudio2015附带的git插件没有显示该文件的完整历史记录。我有一个文件试图查看历史记录,它只显示了一次提交,但在命令行“git log--follow THEFILE”中显示了所有以前的提交。也遇到了这个问题。在一次提交中,我重命名了1300多个文件,其中许多文件被VisualStudio视为重命名文件,并显示了相应的文件历史记录,但有一个很好的块没有显示。VisualStudioUI隐藏了git的一些更丑陋的缺点,即在重命名过程中对文件进行不同的修改,因此有时候它不起作用,这是一个遗憾。我仍然可以通过命令行执行diff,但它需要指定修订、前后路径,并手动将相似性度量调整为0,以便可靠地工作!参见第二个答案