为什么git log / status不返回输出?

时间:2015-06-10 23:02:42

标签: git

我有一个非常古老的git存储库(大约六年),并注意到我没有看到我在git status输出中对文件所做的更改。

我在有问题的特定文件上运行命令:

$ git status Data/schema.sql
$

并没有输出!此文件从一开始就在repo中。另外,如果我将repo签出到另一个目录,那么该文件就会出现(奇怪的是)。

我在git diff Data/schema.sqlgit log Data/schema.sql看到了相同的内容。

通常,当发生类似这样的事情时,这是一个gitignore问题。但即使删除我的.gitignore文件也不会导致此行为发生变化。

什么可能导致这种行为?

3 个答案:

答案 0 :(得分:6)

这个"症状"有两种可能的"诊断":

历史记录中不区分大小写的强制重命名

诊断:

git ls-files

搜索具有不同大写的路径:

some/path/foo
Some/path/bar

解决方案

git mv -f Some/path/* some/path/

将所有文件(/*)移动到重命名的路径非常重要。现在他们都将拥有一条道路。

可能的原因

可能存在some/path包含多个文件的情况,在路径中使用不同的字母大小写进行跟踪。对于提供"错误" git loggit status的路径会导致日志输出中某些提交的不足。

此错误可以在Git 1.9.5上使用git mv -f <path/file> <PATH/file>重现,也可以在较新版本上重现(稍后会检查)。

git log Some/path/foo

日志将包含在git mv -f some/path/bar Some/path/bar执行之前进行的一些提交。

标有skip-worktreeassume-unchanged bit

的文件

感谢@Zeeker的这一假设。

诊断:

git ls-files -v | grep -E '^(S|[a-z])'

有关其他信息,请查看git ls-files documentation

答案 1 :(得分:0)

TL; DR:检查其他正在运行的git-clients。

我有一个类似的问题:git的输出为零。

git statusgit loggit fetch:都一样。没有。空行并返回到命令提示符。

只有在父目录(不是存储库或其他存储库)中时,我才会获得响应。 另外,我得到了错误和错误的命令建议。因此它并没有完全死亡。只是在休眠状态-或类似的东西。

我发现的第一个响应是对git branches的正确打印已知分支。因此,我玩了分支,并使用了git checkout master,但没有给我任何好处,并且以上所有命令均未更改。没事当我尝试切换回develop时,我得到了一个提示:

fatal: Unable to create 'I:/foo/bar/repo/.git/index.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

我找到了一个正在运行的git-UI-client(在我的情况下为GitKraken)并关闭了它。固定。 也许该问题与我的存储库位于Windows网络共享上有关。

答案 2 :(得分:0)

我正在Windows中最深的文件夹中进行git log。没有工作。所以我尝试了git ls-files。它也不起作用

我反复浏览了文件夹多次,直到git ls-files工作为止,然后将git log与相对文件路径一起使用。

不知道是什么原因造成的,但这为我解决了问题。 (至少是暂时的)