git status返回致命:不是git存储库,但.git存在且HEAD具有适当的权限

Jos*_*man 59 git

当我在我的仓库上运行git status时,我得到了 fatal: Not a git repository: /my repo/.git/modules/docs

我已经检查过.git并且包含具有适当权限的HEAD.我可以运行各种其他命令.如果我运行git gui它打开正常并将列出一些已更改的文件,但是缺少很多文件.

我猜测HEAD可能存在某种腐败现象,但不确定.知道如何在不消除整个回购的情况下解决这个问题吗?

更新:我意识到我已经更改了repo目录的名称.错误中引用的目录是目录的旧名称.所以我目前的回购是在,/new dir/.git但错误是说Not a git repository: /old dir/.git/modules/docs.也许git很困惑?

ax0*_*03d 83

这两个文件包含绝对子模块路径:

{submodule}/.git
.git/modules/{submodule}/config
Run Code Online (Sandbox Code Playgroud)

因此,如果您移动了repo,则这两个文件中的绝对路径无效,并导致'not a git repository'错误.只需手动修复这些文件.

  • 谢谢,这对我来说效果很好.但是,第二条路径对我来说有点短:`.git/modules/{submodule}/config`(我在Ubuntu上使用git版本1.7.9.5) (10认同)
  • 这里只是一个注释,对我来说配置文件有一个不同于.git文件的相对路径. (3认同)

Max*_* R. 38

以前版本的git使用绝对路径来定位子模块的gitdir.解决方案如下:

  1. 将git升级到最新版本.有人说你至少需要版本1.7.10.我刚刚用git 1.8.3成功地解决了这个问题.
  2. 删除所有损坏的子模块文件夹: rm -rf broken_submodule_folder
  3. 更新已注册的子模块:git submodule update.您应该看到要检出的子模块.


Jos*_*man 9

我终于解决了这个问题是由于其中一个子模块的问题.只需重命名repo目录就会导致与该子模块发生冲突.看到如何重命名带子模块的git存储库后的讨论我意识到克隆repo是一种更好的方法,而不是重命名目录,并解决了子模块的问题.

  • @JoshFarneman 我(新手)应该如何理解你做了什么。请在前后提供“清晰代码”。这样就可以了解需要什么。 (2认同)

Emi*_*nin 7

就我而言,问题是 .git/HEAD 文件没有指向任何地方,它只包含一系列奇怪的字符。我将 .git/ORIG_HEAD 的内容复制到 .git/HEAD 并再次运行。

来源


Qua*_*ong 6

我通过重置所有git-submodules解决了这个问题

rm -rf .git/modules
git submodule update --init
Run Code Online (Sandbox Code Playgroud)