90

当我对文件运行 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 在托管此 repo 的 GitHub 上运行良好。
  • 如果我将它克隆到 linux 机器并在那里承担责任,它也可以正常工作
  • 似乎只有在 msysgit 这不起作用
4

4 回答 4

128

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

git blame <my_branch>(甚至更好,无论您在哪个分支上都可以)有效的原因git blame HEAD是它不会责怪工作副本版本,因此没有可能尚未提交行。

于 2011-01-11T00:51:29.317 回答
55

找到了解决方案 - 非常奇怪。

如果我运行这个:

git blame file.txt

如上所述,历史已被打破。

如果我这样做:

git blame my_branch file.txt

有用!

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

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
于 2011-01-09T10:04:41.443 回答
8

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

请参阅brian m的提交 4d4813a(2014 年 4 月 26 日) 。卡尔森 ( bk2204) .
(由Junio C Hamano 合并 -- gitster--提交 e934c67中,2014 年 6 月 6 日)

blame:正确处理文件,无论autocrlf

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

于 2014-07-27T08:16:09.473 回答
1

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

我对 git blame file.txt 有同样的问题,然后意识到我用 file.txt 做了一个区分大小写的文件名拼写错误

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

于 2011-08-21T14:36:58.740 回答