【问题标题】:Why would git log/status return no output?为什么 git log/status 不返回任何输出?
【发布时间】:2015-08-26 10:33:01
【问题描述】:

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

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

$ git status Data/schema.sql
$

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

我在git diff Data/schema.sqlgit log Data/schema.sql 看到了同样的情况。

通常,当发生这种情况时,这是一个gitignore 问题。但即使删除我的.gitignore 文件也不会改变这种行为。

什么可能导致这种行为?

【问题讨论】:

  • 您确定 Data/schema.sql 已添加到您的阶段更改中吗? (又名 git add Data/schema.sql)
  • 您是否用skip-worktreeassume-unchanged 位标记了文件?
  • git ls-files -v | grep -i '^S' 应该返回以这种方式标记的所有文件。
  • @Zeeker 它没有这样标记,但这确实帮助了我 - 它在列表中显示为“data/schema.sql”(没有大写“D”)。 git log data/schema.sql 按预期工作。感谢您提供有关git ls-files 的提示!现在,我该如何解决这个问题? ls-files 显示一些条目为Data/blah.sql 和一些为data/blah.sql
  • @NickVolynkin 工作完美!谢谢你的帮助。如果您将其重写为答案,我很乐意接受。

标签: git


【解决方案1】:

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

历史上不区分大小写的强制重命名

诊断:

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

【讨论】:

  • 好的。我必须检查 Git 2.0.1,因为有修复 (stackoverflow.com/a/24979063/6309)
  • @NickVolynkin 这是我的建议,我只是修正了自己的错误。 ;)
  • @Zeeker:我没有看到很多人关心自己的错误。 :)
【解决方案2】:

TL;DR:检查其他正在运行的 git 客户端。

我刚刚遇到了类似的问题: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 网络共享上有关。

【讨论】:

  • 现在这个问题有三种可能的诊断:)
  • 我没有相同但相似的, git status 工作但 git log 没有。重新启动我的会话修复了它,可能是另一个正在运行的 git 进程导致了这个问题。
【解决方案3】:

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

我遍历文件夹的次数足够多,直到 git ls-files 起作用,然后将 git log 与相对文件路径一起使用。

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

【讨论】:

    【解决方案4】:

    我发现如果使用某些版本的 git 附带的 MINGW64 Bash shell,他们尝试管理区分大小写可能会导致此故障。要解决此问题,请使用正确大小写的“cd”。在下面的示例中,正确的目录名称是“CalMAN App”。但是,如果您 cd 到“calman app”,它就可以工作。不幸的是,它混淆了 git。

    micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5 (master)
    $ cd "calman app"
    
    micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5/calman app (master)
    $ git log .
    
    micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5/calman app (master)
    $ cd ..
    
    micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5 (master)
    $ cd "CalMAN App"/
    
    micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5/CalMAN App (master)
    $ git log .
    commit 41d026ddf3282227932136245092aaabace4aded
    ...
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-23
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多