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

12

我正在使用Visual Studio 2015和微软Git客户端。由于Visual Studio在查看Git历史记录时似乎无法处理文件重命名,因此我在使用该工具时遇到了一些查看历史记录和注释的问题。有没有什么好的解决方法?

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

这是我的测试步骤:

  1. 在Visual Studio中,我右键单击文件并选择“查看历史记录”。 (仅显示4个提交)
  2. 在历史窗口中,我点击“显示完整历史记录”——仍然是同样的4个提交。
  3. 从git命令行中,我运行了git log --follow TheFile.cs(它产生了13个提交)
  4. 在Atlassian Source Tree中,我获取了文件的日志,并勾选了“跟随重命名的文件”选项。 它与命令行产生了相同的13个提交。

我真正想要的是在Visual Studio中具有匹配功能的选项。这可能吗?


1
我也遇到了这个问题。在一个提交中,我重命名了1300多个文件,其中许多被Visual Studio视为重命名,并显示了相应的文件历史记录,但还有很多没有。Visual Studio UI隐藏了Git的一些丑陋之处,即跨重命名差异文件修订,所以有时它不起作用,这是一件遗憾的事情。我仍然可以通过命令行进行差异比较,但需要指定修订版本、前后路径,并手动将相似度指标调整为0,以便它能可靠地工作!请参见https://dev59.com/rWsz5IYBdhLWcg3wpZdF的第二个答案。 - aggieNick02
1个回答

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

File History

然而,Git不会追踪两个提交之间的更改-相反,它比较提交的快照以确定文件如何更改。因此,存储库历史记录中没有重命名信息。相反,这是通过将原始提交中的文件与后续提交中的文件进行比较来计算的。如果它们足够相似,则Git将视其为重命名。由于这是一种启发式方法,不能保证将其视为重命名。但是,通常情况下,Visual Studio和Git for Windows应该就此事达成一致。我很好奇为什么一个报告这是重命名,而另一个则没有。有两种可能性: 1.该文件非常接近相似度的边缘-例如,Git已经决定这两个修订版本相似度为61%,因此是重命名,而Visual Studio则认为这两个修订版本只有59%相似,因此不是重命名。2.这里存在某些错误,导致Visual Studio无法正确计算相似度。如果我必须猜测,我会猜测存在空格或行结束符问题,因为这在Git中总是有问题的。
如果您能分享这个文件的两个版本,开启一个连接错误或直接将它们发送给我会有助于进一步调查。

嗨 Edward:恐怕公司政策不允许我分享我们的任何源代码。在git命令行中使用--follow选项可以给我期望的版本,而从cmd行中看到的最旧版本与VS显示的最旧版本相差很大。只有21行的跟随选项较旧版本。Visual Studio显示的最旧版本约有100行。我在准备从svn迁移到git时发现了这个问题。查看SVN历史记录,似乎目录已重命名,这是VS中最旧的版本。 - JMarsch
就此而言,看起来VS确实看到了一些重命名--当我在研究迁移时,我了解了git如何跟踪更改,并且很高兴地看到VS在我的测试中处理了重命名。上面的发现有点突然。我将尝试真正追踪它是否是目录重命名。 - JMarsch
我的猜测是VS没有将“--follow”作为参数包含在内。我已经对您的代码库进行了相当大的重构。在VS之外,我可以使用“--follow”查看历史记录。但是VS会在“重命名提交”处断然停止。 - Jacob T. Nielsen
@JacobT.Nielsen 没有 --follow 参数。VS 不使用 Git 命令行。重命名检测启发式算法可能存在差异。如果我必须猜测,我会打赌它与行结束符有关,因为所有可怕的事情都与此有关。 - Edward Thomson
2
我有点困惑。从我看到的情况来看,Visual Studio 2015自带的git插件没有显示文件的完整历史记录。我尝试查看一个文件的历史记录,但它只显示了一个提交,但在命令行中,“git log --follow THEFILE”显示了所有先前的提交。 - Derek Greer
大家好! 有没有人知道这个案子有没有任何进展? 我们在将许多文件移动到仓库内后,也遇到了一个实际问题。对于一些文件,Visual Studio 2019能够识别出它们的移动,但对于许多其他文件则无法识别! 只要我们在 git 命令行中使用参数 '--follow' 或 SourceTree 中的 'Follow renamed files' 功能,就可以看到文件的完整历史记录,但不幸的是 Visual Studio 却无法显示... - burgerS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接