Git责备显示没有历史记录

Posted

技术标签:

【中文标题】Git责备显示没有历史记录【英文标题】:Git blame showing no history 【发布时间】:2011-06-06 00:39:18 【问题描述】:

当我对文件运行 git blame 时(使用 msysgit),我总是得到以下类型的打印输出:

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) 
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

即它将所有行显示为尚未提交。

我在很多文件上试过这个,有很多提交 - 总是相同的结果。我也尝试使用相对/完整路径,但似乎没有什么区别。

当我尝试使用 TortoiseGit 的责备时,它总是将每一行显示为在第一次提交时最后提交:

甚至认为,正如我所说,这些文件的历史记录中实际上有数十次提交..

想法?

编辑 - 更多信息

Git blame 在托管此存储库的 GitHub 上运行良好。 如果我将它克隆到 linux 机器上并在那里承担责任,它也可以正常工作 似乎只有在 msysgit 上这不起作用

【问题讨论】:

对我来说,这个问题是由于使用符号链接路径与存储库识别的路径相对,所以它认为文件是全新的。 注意:从 git 2.0.1(2014 年 6 月 25 日)开始,git blame 应该停止报告所有那些“尚未提交”的行。见my answer below 在邮件列表中:git.661346.n2.nabble.com/… 也发生在 Linux 上。 这也会影响 WSL,所以我添加了标签。希望没关系。 【参考方案1】:

找到了解决方案 - 很奇怪。

如果我运行这个:

git blame file.txt

如上所述,历史记录已被破坏。

如果我这样做:

git blame my_branch file.txt

有效!

这很奇怪,因为 AFAICS 的用法不需要​​分支名称:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file

【讨论】:

这对我有用,感谢您发布它。您应该将此标记为 IMO 的答案。 这在 msysgit 中对我有用,但文件名区分大小写。所以我可以写git blame mybranch cmakelists.txt,它会失败;但如果我写git blame mybranch CMakeLists.txt 它会起作用。 我同意,韦斯;在我指定分支之前,责备没有显示任何历史记录,这与文档不一致。 我的天啊,责备太坏了。【参考方案2】:

git blame file.txt 归咎于工作副本中 file.txt 的版本。如果 file.txt 在 repo 中有 Windows 换行符 (CRLF) 并且您有 core.autocrlf = true,那么 file.txt 的每一行都将被认为是不同的,并由 git blame 报告为尚未提交。

git blame <my_branch>(或者更好的git blame HEAD,无论您在哪个分支上都可以)起作用的原因是它不会责怪工作副本版本,因此没有可能还没有行承诺。

【讨论】:

git blame -w 忽略空格,因此如果需要,您仍然可以责怪工作副本 Git blame -w 应该是一个单独的答案和接受的答案;)。没有评论的接受答案对我来说毫无用处。【参考方案3】:

另一种可能性:区分大小写的文件名拼写错误

我在使用 git blame file.txt 时遇到了同样的问题,然后意识到我在 file.txt 中输入了一个区分大小写的文件名拼写错误

将其更改为 File.txt(例如),我得到了预期的结果而无需指定 my_branch: git blame File.txt

【讨论】:

【参考方案4】:

从 git 2.0.1(2014 年 6 月 25 日)开始,git blame 应该停止报告所有那些“尚未提交”的行。

参见brian m. carlson (bk2204)commit 4d4813a(2014 年 4 月 26 日)。(由 Junio C Hamano -- gitster -- 合并于 commit e934c67,2014 年 6 月 6 日)

blame:无论autocrlf如何,都能正确处理文件

如果文件包含 CRLF 行结尾的存储库中以 core.autocrlf=input 结尾,则责备总是将行标记为“Not Committed Yet”,即使它们没有被修改。 在创建虚假提交时不要尝试转换行尾,这样无论autocrlf 设置如何,责备都能正常工作。

【讨论】:

我在 git v2.1.3 中仍然有问题 我遇到了 git 版本 2.16.1.windows.1 的问题 @Radon8472 你能用git config -l 的输出添加一个新问题来说明这个问题吗(以及返回这个答案的链接):这将允许我和其他人尝试看看问题是否仍然存在.

以上是关于Git责备显示没有历史记录的主要内容,如果未能解决你的问题,请参考以下文章

sh 在#git中将历史记录显示为图形

使用 Git 版本控制查看文件的更改历史记录

在 Git 日志中仅显示一个分支的历史记录

为啥 git log 可能不显示移动文件的历史记录,我该怎么办?

idea中的查看git历史记录,不显示文件详细信息

基于线路的 SCM 责备信息存储在哪里?