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责备显示没有历史记录的主要内容,如果未能解决你的问题,请参考以下文章