Git责备没有历史

Ass*_*vie 87 git blame msysgit

当我在文件上运行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
Run Code Online (Sandbox Code Playgroud)

即它显示所有行都没有提交.

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

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

替代文字

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

想法?

编辑 - 更多信息

  • Git blame在GitHub上工作正常,这个repo是托管的.
  • 如果我将它克隆到Linux机器并在那里负责,它也可以正常工作
  • 似乎只在msysgit上这不起作用

kus*_*sma 126

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`忽略了空格,所以如果需要你仍然可以责备工作副本 (116认同)
  • Git责备-w应该是一个单独的答案和接受的答案;).没有评论的接受的答案对我来说毫无用处. (12认同)

Ass*_*vie 55

找到解决方案 - 非常奇怪.

如果我运行这个:

git blame file.txt
Run Code Online (Sandbox Code Playgroud)

历史被打破,如上所述.

如果我这样做:

git blame my_branch file.txt
Run Code Online (Sandbox Code Playgroud)

有用!

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

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,感谢发布它.你应该把这个标记为IMO的答案. (7认同)

Von*_*onC 7

启动git 2.0.1(2014年6月25日),git blame应该停止报告所有那些"尚未提交"的行.

提交4d4813a布赖恩·米 carlson(bk2204)(2014年4月):

责备:无论如何正确处理文件 gitster

如果文件在存储库中包含CRLF行结尾blame,则责备始终将行标记为" autocrlf",即使它们未经修改也是如此.
创建伪提交时不要尝试转换行结尾,以便无论autocrlf设置如何,blame都能正常工作.

  • 我仍然在git v2.1.3中遇到问题 (8认同)